home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue37 / outlook / mapi / mapidefs.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1997-06-19  |  69.3 KB  |  2,552 lines

  1. {++
  2.  
  3.   m a p i d e f s . p a s
  4.  
  5.   Abstract:
  6.  
  7.     Automatic conversion of mapidefs.h.
  8.  
  9.   Comments:
  10.  
  11.     This source file automatically converted by
  12.     htrans 0.91 beta 1 Copyright (c) 1997 Alexander Staubo
  13.  
  14.   Revision history:
  15.  
  16.     18-06-1997 20:53 alex  [Autogenerated]
  17.     18-06-1997 20:53 alex  Retouched for release
  18.  
  19. --}
  20.  
  21. unit MapiDefs;
  22.  
  23. {$A+}
  24. {$MINENUMSIZE 4}
  25.  
  26. interface
  27.  
  28. uses
  29.   Windows, SysUtils, ActiveX,
  30.   MapiGuid;
  31.  
  32. (*
  33.  *  M A P I D E F S . H
  34.  *
  35.  *  Definitions used by MAPI clients and service providers.
  36.  *
  37.  *  Copyright 1986-1996 Microsoft Corporation. All Rights Reserved.
  38.  *)
  39.  
  40. { Array dimension for structures with variable-sized arrays at the end. }
  41.  
  42. const
  43.   MAPI_DIM = 1;
  44.  
  45. const
  46.   MAPI_NT_SERVICE = ULONG($00010000)   { Provider is being loaded in an NT service }
  47.   ;
  48.  
  49. { Simple data types }
  50.  
  51. type
  52.   TWCHAR = Word;
  53.   
  54. {$IFDEF UNICODE}
  55.  
  56. type
  57.   TTCHAR = TWCHAR;
  58.   
  59. {$ELSE}
  60.  
  61. type
  62.   TTCHAR = Char;
  63.   
  64. {$ENDIF}
  65.  
  66. type
  67.   PWSTR = ^TWCHAR;
  68.   
  69.   PCWSTR = ^TWCHAR;
  70.  
  71.   PTSTR = ^TTCHAR;
  72.   
  73.   PCTSTR = ^TTCHAR;
  74.   
  75.   PBYTE = ^Byte;
  76.   
  77.                                        { defined MIDL_PASS }
  78.  
  79. type
  80.   PULONG = ^ULONG;
  81.  
  82. type
  83.   TLHANDLE = Longint;
  84.  
  85.   PLHANDLE = ^TLHANDLE;
  86.  
  87. type
  88.   TFILETIME =     
  89.     record
  90.       dwLowDateTime : DWORD;
  91.       dwHighDateTime : DWORD;
  92.     end;
  93.     
  94.   PFILETIME = ^TFILETIME;
  95.  
  96. (*
  97.  *  This flag is used in many different MAPI calls to signify that
  98.  *  the object opened by the call should be modifiable (MAPI_MODIFY).
  99.  *  If the flag MAPI_MAX_ACCESS is set, the object returned should be
  100.  *  returned at the maximum access level allowed.  An additional
  101.  *  property available on the object (PR_ACCESS_LEVEL) uses the same
  102.  *  MAPI_MODIFY flag to say just what this new access level is.
  103.  *)
  104.  
  105. const
  106.   MAPI_MODIFY = ULONG($00000001);
  107.  
  108. (*
  109.  *  The following flags are used to indicate to the client what access
  110.  *  level is permissible in the object. They appear in PR_ACCESS in
  111.  *  message and folder objects as well as in contents and associated
  112.  *  contents tables
  113.  *)
  114.  
  115. const
  116.   MAPI_ACCESS_MODIFY = ULONG($00000001);
  117.   MAPI_ACCESS_READ = ULONG($00000002);
  118.   MAPI_ACCESS_DELETE = ULONG($00000004);
  119.   MAPI_ACCESS_CREATE_HIERARCHY = ULONG($00000008);
  120.   MAPI_ACCESS_CREATE_CONTENTS = ULONG($00000010);
  121.   MAPI_ACCESS_CREATE_ASSOCIATED = ULONG($00000020);
  122.  
  123. (*
  124.  *  The MAPI_UNICODE flag is used in many different MAPI calls to signify
  125.  *  that strings passed through the interface are in Unicode (a 16-bit
  126.  *  character set). The default is an 8-bit character set.
  127.  *
  128.  *  The value fMapiUnicode can be used as the 'normal' value for
  129.  *  that bit, given the application's default character set.
  130.  *)
  131.  
  132. const
  133.   MAPI_UNICODE = ULONG($80000000);
  134.  
  135. {$IFDEF UNICODE}
  136.  
  137. const
  138.   fMapiUnicode = MAPI_UNICODE;
  139.  
  140. {$ELSE}
  141.  
  142. const
  143.   fMapiUnicode = 0;
  144.  
  145. {$ENDIF}
  146.  
  147. { successful HRESULT }
  148.  
  149. const
  150.   hrSuccess = 0;
  151.  
  152. { Recipient types }
  153.  
  154. const
  155.   MAPI_ORIG = 0                        { Recipient is message originator          }
  156.   ;
  157.   MAPI_TO = 1                          { Recipient is a primary recipient         }
  158.   ;
  159.   MAPI_CC = 2                          { Recipient is a copy recipient            }
  160.   ;
  161.   MAPI_BCC = 3                         { Recipient is blind copy recipient        }
  162.   ;
  163.   MAPI_P1 = $10000000                  { Recipient is a P1 resend recipient       }
  164.   ;
  165.   MAPI_SUBMITTED = $80000000           { Recipient is already processed         }
  166.   ;
  167.  
  168. { #define MAPI_AUTHORIZE 4        recipient is a CMC authorizing user      }
  169.  
  170. {#define MAPI_DISCRETE 0x10000000 Recipient is a P1 resend recipient       }
  171.  
  172. { Bit definitions for abFlags[0] of ENTRYID }
  173.  
  174. const
  175.   MAPI_SHORTTERM = $80;
  176.   MAPI_NOTRECIP = $40;
  177.   MAPI_THISSESSION = $20;
  178.   MAPI_NOW = $10;
  179.   MAPI_NOTRESERVED = $08;
  180.  
  181. { Bit definitions for abFlags[1] of ENTRYID }
  182.  
  183. const
  184.   MAPI_COMPOUND = $80;
  185.  
  186. { ENTRYID }
  187.  
  188. type
  189.   TENTRYID =     
  190.     record
  191.       abFlags : array[0..4 - 1] of Byte;
  192.       ab : array[0..MAPI_DIM - 1] of Byte;
  193.     end;
  194.     
  195.   PENTRYID = ^TENTRYID;
  196.   
  197. { Byte-order-independent version of GUID (world-unique identifier) }
  198.  
  199. type
  200.   TMAPIUID =     
  201.     record
  202.       ab : array[0..16 - 1] of Byte;
  203.     end;
  204.     
  205.   PMAPIUID = ^TMAPIUID;
  206.   
  207. { Note:  need to include C run-times (memory.h) to use this macro }
  208.  
  209. (*
  210.  * Constants for one-off entry ID:
  211.  * The MAPIUID that identifies the one-off provider;
  212.  * the flag that defines whether the embedded strings are Unicode;
  213.  * the flag that specifies whether the recipient gets TNEF or not.
  214.  *)
  215.  
  216. const
  217.   MAPI_ONE_OFF_UID : array[0..15] of Integer =
  218.     (
  219.       $81, $2b, $1f, $a4, $be, $a3, $10, $19, $9d, $6e, $00, $dd, $01, 
  220.       $0f, $54, $02
  221.     );
  222.   MAPI_ONE_OFF_UNICODE = $8000;
  223.   MAPI_ONE_OFF_NO_RICH_INFO = $0001;
  224.  
  225. { Object type }
  226.  
  227. const
  228.   MAPI_STORE = ULONG($00000001)        { Message Store }
  229.   ;
  230.   MAPI_ADDRBOOK = ULONG($00000002)     { Address Book }
  231.   ;
  232.   MAPI_FOLDER = ULONG($00000003)       { Folder }
  233.   ;
  234.   MAPI_ABCONT = ULONG($00000004)       { Address Book Container }
  235.   ;
  236.   MAPI_MESSAGE = ULONG($00000005)      { Message }
  237.   ;
  238.   MAPI_MAILUSER = ULONG($00000006)     { Individual Recipient }
  239.   ;
  240.   MAPI_ATTACH = ULONG($00000007)       { Attachment }
  241.   ;
  242.   MAPI_DISTLIST = ULONG($00000008)     { Distribution List Recipient }
  243.   ;
  244.   MAPI_PROFSECT = ULONG($00000009)     { Profile Section }
  245.   ;
  246.   MAPI_STATUS = ULONG($0000000A)       { Status Object }
  247.   ;
  248.   MAPI_SESSION = ULONG($0000000)       { Session }
  249.   ;
  250.   MAPI_FORMINFO = ULONG($0000000C)     { Form Information }
  251.   ;
  252.  
  253. (*
  254.  *  Maximum length of profile names and passwords, not including
  255.  *  the null termination character.
  256.  *)
  257.  
  258. const
  259.   cchProfileNameMax = 64;
  260.   cchProfilePassMax = 64;
  261.  
  262. { Property Types }
  263.  
  264. const
  265.   MV_FLAG = $1000                      { Multi-value flag }
  266.   ;
  267.   PT_UNSPECIFIED = ULONG(0)            { (Reserved for interface use) type doesn't matter to caller }
  268.   ;
  269.   PT_NULL = ULONG(1)                   { NULL property value }
  270.   ;
  271.   PT_I2 = ULONG(2)                     { Signed 16-bit value }
  272.   ;
  273.   PT_LONG = ULONG(3)                   { Signed 32-bit value }
  274.   ;
  275.   PT_R4 = ULONG(4)                     { 4-byte floating point }
  276.   ;
  277.   PT_DOUBLE = ULONG(5)                 { Floating point double }
  278.   ;
  279.   PT_CURRENCY = ULONG(6)               { Signed 64-bit int (decimal w/    4 digits right of decimal pt) }
  280.   ;
  281.   PT_APPTIME = ULONG(7)                { Application time }
  282.   ;
  283.   PT_ERROR = ULONG(10)                 { 32-bit error value }
  284.   ;
  285.   PT_BOOLEAN = ULONG(11)               { 16-bit boolean (non-zero true) }
  286.   ;
  287.   PT_OBJECT = ULONG(13)                { Embedded object in a property }
  288.   ;
  289.   PT_I8 = ULONG(20)                    { 8-byte signed integer }
  290.   ;
  291.   PT_STRING8 = ULONG(30)               { Null terminated 8-bit character string }
  292.   ;
  293.   PT_UNICODE = ULONG(31)               { Null terminated Unicode string }
  294.   ;
  295.   PT_SYSTIME = ULONG(64)               { FILETIME 64-bit int w/ number of 100ns periods since Jan 1,1601 }
  296.   ;
  297.   PT_CLSID = ULONG(72)                 { OLE GUID }
  298.   ;
  299.   PT_BINARY = ULONG(258)               { Uninterpreted (counted byte array) }
  300.   ;
  301.  
  302. { Changes are likely to these numbers, and to their structures. }
  303.  
  304. { Alternate property type names for ease of use }
  305.  
  306. const
  307.   PT_SHORT = PT_I2;
  308.   PT_I4 = PT_LONG;
  309.   PT_FLOAT = PT_R4;
  310.   PT_R8 = PT_DOUBLE;
  311.   PT_LONGLONG = PT_I8;
  312.  
  313. (*
  314.  *  The type of a MAPI-defined string property is indirected, so
  315.  *  that it defaults to Unicode string on a Unicode platform and to
  316.  *  String8 on an ANSI or DBCS platform.
  317.  *
  318.  *  Macros are defined here both for the property type, and for the
  319.  *  field of the property value structure which should be
  320.  *  dereferenced to obtain the string pointer.
  321.  *)
  322.  
  323. {$IFDEF UNICODE}
  324.  
  325. const
  326.   PT_TSTRING = PT_UNICODE;
  327.   PT_MV_TSTRING = MV_FLAG or PT_UNICODE;
  328.  
  329. {$ELSE}
  330.  
  331. const
  332.   PT_TSTRING = PT_STRING8;
  333.   PT_MV_TSTRING = MV_FLAG or PT_STRING8;
  334.  
  335. {$ENDIF}
  336.  
  337. { Property Tags
  338.  *
  339.  * By convention, MAPI never uses 0 or FFFF as a property ID.
  340.  * Use as null values, initializers, sentinels, or what have you.
  341.  }
  342.  
  343. const
  344.   PROP_TYPE_MASK = ULONG($0000FFFF)    { Mask for Property type }
  345.   ;
  346.  
  347. const
  348.   PROP_ID_NULL = 0;
  349.   PROP_ID_INVALID = $FFFF;
  350.   PR_NULL = (PT_NULL) or ((PROP_ID_NULL) shl 16);
  351.  
  352. { Multi-valued Property Types }
  353.  
  354. const
  355.   PT_MV_I2 = MV_FLAG or PT_I2;
  356.   PT_MV_LONG = MV_FLAG or PT_LONG;
  357.   PT_MV_R4 = MV_FLAG or PT_R4;
  358.   PT_MV_DOUBLE = MV_FLAG or PT_DOUBLE;
  359.   PT_MV_CURRENCY = MV_FLAG or PT_CURRENCY;
  360.   PT_MV_APPTIME = MV_FLAG or PT_APPTIME;
  361.   PT_MV_SYSTIME = MV_FLAG or PT_SYSTIME;
  362.   PT_MV_STRING8 = MV_FLAG or PT_STRING8;
  363.   PT_MV_BINARY = MV_FLAG or PT_BINARY;
  364.   PT_MV_UNICODE = MV_FLAG or PT_UNICODE;
  365.   PT_MV_CLSID = MV_FLAG or PT_CLSID;
  366.   PT_MV_I8 = MV_FLAG or PT_I8;
  367.  
  368. { Alternate property type names for ease of use }
  369.  
  370. const
  371.   PT_MV_SHORT = PT_MV_I2;
  372.   PT_MV_I4 = PT_MV_LONG;
  373.   PT_MV_FLOAT = PT_MV_R4;
  374.   PT_MV_R8 = PT_MV_DOUBLE;
  375.   PT_MV_LONGLONG = PT_MV_I8;
  376.  
  377. (*
  378.  *  Property type reserved bits
  379.  *
  380.  *  MV_INSTANCE is used as a flag in table operations to request
  381.  *  that a multi-valued property be presented as a single-valued
  382.  *  property appearing in multiple rows.
  383.  *)
  384.  
  385. const
  386.   MV_INSTANCE = $2000;
  387.   MVI_FLAG = MV_FLAG or MV_INSTANCE;
  388.  
  389. { --------------- }
  390.  
  391. { Data Structures }
  392.  
  393. { --------------- }
  394.  
  395. { Property Tag Array }
  396.  
  397. type
  398.   TSPropTagArray =     
  399.     record
  400.       cValues : ULONG;
  401.       aulPropTag : array[0..MAPI_DIM - 1] of ULONG;
  402.     end;
  403.     
  404.   PSPropTagArray = ^TSPropTagArray;
  405.   
  406. {  SPropTagArray }
  407.  
  408. { -------------- }
  409.  
  410. { Property Value }
  411.  
  412. { -------------- }
  413.  
  414. { 32-bit CURRENCY definition stolen from oaidl.h }
  415.  
  416. { real definition that makes the C++ compiler happy }
  417.  
  418. type
  419.   TCY =
  420.     record
  421.       case Integer of
  422.         1 :
  423.           (
  424.             _noname1 :               
  425.               record
  426.  
  427.                 {$IFDEF _MAC}
  428.                 Hi : Longint;
  429.                 Lo : Longint;
  430.                 {$ELSE}
  431.                 Lo : Longint;
  432.                 Hi : Longint;
  433.                 {$ENDIF}
  434.                 
  435.               end;
  436.             );
  437.         2 : 
  438.           (
  439.             int64 : LONGLONG;
  440.           );
  441.     end;
  442.   
  443.                                        { size is 8 }
  444.  
  445. type
  446.   TCURRENCY = TCY;
  447.   
  448.   TSBinary =     
  449.     record
  450.       cb : ULONG;
  451.       lpb : PBYTE;
  452.     end;
  453.     
  454.   PSBinary = ^TSBinary;
  455.   
  456.   TSShortArray =     
  457.     record
  458.       cValues : ULONG;
  459.       lpi : ^Smallint;
  460.     end;
  461.     
  462.   TSGuidArray =     
  463.     record
  464.       cValues : ULONG;
  465.       lpguid : ^TGUID;
  466.     end;
  467.     
  468.   TSRealArray =     
  469.     record
  470.       cValues : ULONG;
  471.       lpflt : ^Single;
  472.     end;
  473.     
  474.   TSLongArray =     
  475.     record
  476.       cValues : ULONG;
  477.       lpl : ^Longint;
  478.     end;
  479.     
  480.   TSLargeIntegerArray =     
  481.     record
  482.       cValues : ULONG;
  483.       lpli : ^TLargeInteger;
  484.     end;
  485.     
  486.   TSDateTimeArray =     
  487.     record
  488.       cValues : ULONG;
  489.       lpft : ^TFILETIME;
  490.     end;
  491.     
  492.   TSAppTimeArray =     
  493.     record
  494.       cValues : ULONG;
  495.       lpat : ^Double;
  496.     end;
  497.     
  498.   TSCurrencyArray =     
  499.     record
  500.       cValues : ULONG;
  501.       lpcur : ^TCURRENCY;
  502.     end;
  503.     
  504.   TSBinaryArray =     
  505.     record
  506.       cValues : ULONG;
  507.       lpbin : ^TSBinary;
  508.     end;
  509.     
  510.   TSDoubleArray =     
  511.     record
  512.       cValues : ULONG;
  513.       lpdbl : ^Double;
  514.     end;
  515.     
  516.   TSWStringArray =     
  517.     record
  518.       cValues : ULONG;
  519.       lppszW : ^PWSTR;
  520.     end;
  521.     
  522.   TSLPSTRArray =     
  523.     record
  524.       cValues : ULONG;
  525.       lppszA : ^LPSTR;
  526.     end;
  527.     
  528.   T__UPV =     
  529.     record
  530.       case Integer of
  531.         1 : 
  532.           (
  533.             i : Smallint;              { case PT_I2 }
  534.           );
  535.         2 : 
  536.           (
  537.             l : Longint;               { case PT_LONG }
  538.           );
  539.         3 : 
  540.           (
  541.             ul : ULONG;                { alias for PT_LONG }
  542.           );
  543.         4 : 
  544.           (
  545.             flt : Single;              { case PT_R4 }
  546.           );
  547.         5 : 
  548.           (
  549.             dbl : Double;              { case PT_DOUBLE }
  550.           );
  551.         6 : 
  552.           (
  553.             b : Smallint;              { case PT_BOOLEAN }
  554.           );
  555.         7 : 
  556.           (
  557.             cur : TCURRENCY;           { case PT_CURRENCY }
  558.           );
  559.         8 : 
  560.           (
  561.             at : Double;               { case PT_APPTIME }
  562.           );
  563.         9 : 
  564.           (
  565.             ft : TFILETIME;            { case PT_SYSTIME }
  566.           );
  567.         10 : 
  568.           (
  569.             lpszA : LPSTR;             { case PT_STRING8 }
  570.           );
  571.         11 : 
  572.           (
  573.             bin : TSBinary;            { case PT_BINARY }
  574.           );
  575.         12 : 
  576.           (
  577.             lpszW : PWSTR;             { case PT_UNICODE }
  578.           );
  579.         13 : 
  580.           (
  581.             lpguid : PGUID;            { case PT_CLSID }
  582.           );
  583.         14 : 
  584.           (
  585.             li : TLargeInteger;        { case PT_I8 }
  586.           );
  587.         15 : 
  588.           (
  589.             MVi : TSShortArray;        { case PT_MV_I2 }
  590.           );
  591.         16 : 
  592.           (
  593.             MVl : TSLongArray;         { case PT_MV_LONG }
  594.           );
  595.         17 : 
  596.           (
  597.             MVflt : TSRealArray;       { case PT_MV_R4 }
  598.           );
  599.         18 : 
  600.           (
  601.             MVdbl : TSDoubleArray;     { case PT_MV_DOUBLE }
  602.           );
  603.         19 : 
  604.           (
  605.             MVcur : TSCurrencyArray;   { case PT_MV_CURRENCY }
  606.           );
  607.         20 : 
  608.           (
  609.             MVat : TSAppTimeArray;     { case PT_MV_APPTIME }
  610.           );
  611.         21 : 
  612.           (
  613.             MVft : TSDateTimeArray;    { case PT_MV_SYSTIME }
  614.           );
  615.         22 : 
  616.           (
  617.             MVbin : TSBinaryArray;     { case PT_MV_BINARY }
  618.           );
  619.         23 : 
  620.           (
  621.             MVszA : TSLPSTRArray;      { case PT_MV_STRING8 }
  622.           );
  623.         24 : 
  624.           (
  625.             MVszW : TSWStringArray;    { case PT_MV_UNICODE }
  626.           );
  627.         25 : 
  628.           (
  629.             MVguid : TSGuidArray;      { case PT_MV_CLSID }
  630.           );
  631.         26 : 
  632.           (
  633.             MVli : TSLargeIntegerArray;{ case PT_MV_I8 }
  634.           );
  635.         27 : 
  636.           (
  637.             err : SCODE;               { case PT_ERROR }
  638.           );
  639.         28 : 
  640.           (
  641.             x : Longint;               { case PT_NULL, PT_OBJECT (no usable value) }
  642.           );
  643.     end;
  644.   
  645.   TSPropValue =     
  646.     record
  647.       ulPropTag : ULONG;
  648.       dwAlignPad : ULONG;
  649.       Value : T__UPV;
  650.     end;
  651.     
  652.   PSPropValue = ^TSPropValue;
  653.   
  654. { --------------------------------------------- }
  655.  
  656. { Property Problem and Property Problem Arrays }
  657.  
  658. { --------------------------------------------- }
  659.  
  660. type
  661.   TSPropProblem =     
  662.     record
  663.       ulIndex : ULONG;
  664.       ulPropTag : ULONG;
  665.       scode : SCODE;
  666.     end;
  667.     
  668.   PSPropProblem = ^TSPropProblem;
  669.   
  670.   TSPropProblemArray =     
  671.     record
  672.       cProblem : ULONG;
  673.       aProblem : array[0..MAPI_DIM - 1] of TSPropProblem;
  674.     end;
  675.     
  676.   PSPropProblemArray = ^TSPropProblemArray;
  677.   
  678. (*
  679.  *  ENTRYLIST
  680.  *)
  681.  
  682. type
  683.   TENTRYLIST = TSBinaryArray;
  684.   
  685.   PENTRYLIST = ^TENTRYLIST;
  686.   
  687. (*
  688.  *  FLATENTRYLIST
  689.  *  MTSID
  690.  *  FLATMTSIDLIST
  691.  *)
  692.  
  693. type
  694.   TFLATENTRY =     
  695.     record
  696.       cb : ULONG;
  697.       abEntry : array[0..MAPI_DIM - 1] of Byte;
  698.     end;
  699.     
  700.   PFLATENTRY = ^TFLATENTRY;
  701.   
  702.   TFLATENTRYLIST =     
  703.     record
  704.       cEntries : ULONG;
  705.       cbEntries : ULONG;
  706.       abEntries : array[0..MAPI_DIM - 1] of Byte;
  707.     end;
  708.     
  709.   PFLATENTRYLIST = ^TFLATENTRYLIST;
  710.   
  711.   TMTSID =     
  712.     record
  713.       cb : ULONG;
  714.       ab : array[0..MAPI_DIM - 1] of Byte;
  715.     end;
  716.     
  717.   PMTSID = ^TMTSID;
  718.   
  719.   TFLATMTSIDLIST =     
  720.     record
  721.       cMTSIDs : ULONG;
  722.       cbMTSIDs : ULONG;
  723.       abMTSIDs : array[0..MAPI_DIM - 1] of Byte;
  724.     end;
  725.     
  726.   PFLATMTSIDLIST = ^TFLATMTSIDLIST;
  727.   
  728. { No SizedXXX macros for these types. }
  729.  
  730. { ------------------------------ }
  731.  
  732. { ADRENTRY, ADRLIST }
  733.  
  734. type
  735.   TADRENTRY =     
  736.     record
  737.       ulReserved1 : ULONG;             { Never used }
  738.       cValues : ULONG;
  739.       rgPropVals : PSPropValue;
  740.     end;
  741.     
  742.   PADRENTRY = ^TADRENTRY;
  743.   
  744.   TADRLIST =     
  745.     record
  746.       cEntries : ULONG;
  747.       aEntries : array[0..MAPI_DIM - 1] of TADRENTRY;
  748.     end;
  749.     
  750.   PADRLIST = ^TADRLIST;
  751.   
  752. { ------------------------------ }
  753.  
  754. { SRow, SRowSet }
  755.  
  756. type
  757.   {!! Array for containing property values }
  758.   PSPropValueArray = ^TSPropValueArray;
  759.   TSPropValueArray = array[0..0] of TSPropValue;
  760.  
  761.   TSRow =
  762.     record
  763.       ulAdrEntryPad : ULONG;           { Pad so SRow's can map to ADRENTRY's }
  764.       cValues : ULONG;                 { Count of property values }
  765.       {!! lpProps member converted to array }
  766.       lpProps : PSPropValueArray;      { Property value array }
  767.     end;
  768.     
  769.   PSRow = ^TSRow;
  770.   
  771.   TSRowSet =     
  772.     record
  773.       cRows : ULONG;                   { Count of rows }
  774.       aRow : array[0..MAPI_DIM - 1] of TSRow;
  775.                                        { Array of rows }
  776.     end;
  777.     
  778.   PSRowSet = ^TSRowSet;
  779.   
  780. { MAPI Allocation Routines ------------------------------------------------ }
  781.  
  782. type
  783.   TALLOCATEBUFFER = function (cbSize : ULONG; var lppBuffer : Pointer) : SCODE; stdcall;
  784.   
  785.   TALLOCATEMORE = function (cbSize : ULONG; lpObject : Pointer; 
  786.     var lppBuffer : Pointer) : SCODE; stdcall;
  787.   
  788.   TFREEBUFFER = function (lpBuffer : Pointer) : ULONG; stdcall;
  789.   
  790.   PALLOCATEBUFFER = ^TALLOCATEBUFFER;
  791.   
  792.   PALLOCATEMORE = ^TALLOCATEMORE;
  793.   
  794.   PFREEBUFFER = ^TFREEBUFFER;
  795.   
  796. { MAPI Component Object Model Macros -------------------------------------- }
  797.  
  798. { Pointers to MAPI Interfaces --------------------------------------------- }
  799.  
  800. type
  801.   PCIID = ^TIID;
  802.  
  803. { Extended MAPI Error Information ----------------------------------------- }
  804.  
  805. type
  806.   TMAPIERROR =     
  807.     record
  808.       ulVersion : ULONG;
  809.       lpszError : PChar;
  810.       lpszComponent : PChar;
  811.       ulLowLevelError : ULONG;
  812.       ulContext : ULONG;
  813.     end;
  814.     
  815.   PMAPIERROR = ^TMAPIERROR;
  816.   
  817. { IMAPIAdviseSink Interface ----------------------------------------------- }
  818.  
  819. (*
  820.  *  Notification event types. The event types can be combined in a bitmask
  821.  *  for filtering. Each one has a parameter structure associated with it:
  822.  *
  823.  *      fnevCriticalError       ERROR_NOTIFICATION
  824.  *      fnevNewMail             NEWMAIL_NOTIFICATION
  825.  *      fnevObjectCreated       OBJECT_NOTIFICATION
  826.  *      fnevObjectDeleted       OBJECT_NOTIFICATION
  827.  *      fnevObjectModified      OBJECT_NOTIFICATION
  828.  *      fnevObjectCopied        OBJECT_NOTIFICATION
  829.  *      fnevSearchComplete      OBJECT_NOTIFICATION
  830.  *      fnevTableModified       TABLE_NOTIFICATION
  831.  *      fnevStatusObjectModified ?
  832.  *
  833.  *      fnevExtended            EXTENDED_NOTIFICATION
  834.  *)
  835.  
  836. const
  837.   fnevCriticalError = ULONG($00000001);
  838.   fnevNewMail = ULONG($00000002);
  839.   fnevObjectCreated = ULONG($00000004);
  840.   fnevObjectDeleted = ULONG($00000008);
  841.   fnevObjectModified = ULONG($00000010);
  842.   fnevObjectMoved = ULONG($00000020);
  843.   fnevObjectCopied = ULONG($00000040);
  844.   fnevSearchComplete = ULONG($00000080);
  845.   fnevTableModified = ULONG($00000100);
  846.   fnevStatusObjectModified = ULONG($00000200);
  847.   fnevReservedForMapi = ULONG($40000000);
  848.   fnevExtended = ULONG($80000000);
  849.  
  850. { TABLE_NOTIFICATION event types passed in ulTableEvent }
  851.  
  852. const
  853.   TABLE_CHANGED = 1;
  854.   TABLE_ERROR = 2;
  855.   TABLE_ROW_ADDED = 3;
  856.   TABLE_ROW_DELETED = 4;
  857.   TABLE_ROW_MODIFIED = 5;
  858.   TABLE_SORT_DONE = 6;
  859.   TABLE_RESTRICT_DONE = 7;
  860.   TABLE_SETCOL_DONE = 8;
  861.   TABLE_RELOAD = 9;
  862.  
  863. { Event Structures }
  864.  
  865. type
  866.   TERROR_NOTIFICATION =     
  867.     record
  868.       cbEntryID : ULONG;
  869.       lpEntryID : PENTRYID;
  870.       scode : SCODE;
  871.       ulFlags : ULONG;                 { 0 or MAPI_UNICODE }
  872.       lpMAPIError : PMAPIERROR;        { Detailed error information }
  873.     end;
  874.     
  875.   TNEWMAIL_NOTIFICATION =     
  876.     record
  877.       cbEntryID : ULONG;
  878.       lpEntryID : PENTRYID;            { identifies the new message }
  879.       cbParentID : ULONG;
  880.       lpParentID : PENTRYID;           { identifies the folder it lives in }
  881.       ulFlags : ULONG;                 { 0 or MAPI_UNICODE }
  882.       lpszMessageClass : PChar;        { message class (UNICODE or string8) }
  883.       ulMessageFlags : ULONG;          { copy of PR_MESSAGE_FLAGS }
  884.     end;
  885.     
  886.   TOBJECT_NOTIFICATION =     
  887.     record
  888.       cbEntryID : ULONG;
  889.       lpEntryID : PENTRYID;            { EntryID of object }
  890.       ulObjType : ULONG;               { Type of object }
  891.       cbParentID : ULONG;
  892.       lpParentID : PENTRYID;           { EntryID of parent object }
  893.       cbOldID : ULONG;
  894.       lpOldID : PENTRYID;              { EntryID of old object }
  895.       cbOldParentID : ULONG;
  896.       lpOldParentID : PENTRYID;        { EntryID of old parent }
  897.       lpPropTagArray : PSPropTagArray;
  898.     end;
  899.     
  900.   TTABLE_NOTIFICATION =     
  901.     record
  902.       ulTableEvent : ULONG;            { Identifies WHICH table event }
  903.       hResult : HResult;               { Value for TABLE_ERROR }
  904.       propIndex : TSPropValue;         { This row's "index property" }
  905.       propPrior : TSPropValue;         { Preceding row's "index property" }
  906.       row : TSRow;                     { New data of added/modified row }
  907.       ulPad : ULONG;                   { Force to 8-byte boundary }
  908.     end;
  909.     
  910.   TEXTENDED_NOTIFICATION =     
  911.     record
  912.       ulEvent : ULONG;                 { extended event code }
  913.       cb : ULONG;                      { size of event parameters }
  914.       pbEventParameters : PBYTE;       { event parameters }
  915.     end;
  916.     
  917.   TSTATUS_OBJECT_NOTIFICATION =     
  918.     record
  919.       cbEntryID : ULONG;
  920.       lpEntryID : PENTRYID;
  921.       cValues : ULONG;
  922.       lpPropVals : PSPropValue;
  923.     end;
  924.     
  925.   TNOTIFICATION =     
  926.     record
  927.       ulEventType : ULONG;             { notification type, i.e. fnevSomething }
  928.       ulAlignPad : ULONG;              { Force to 8-byte boundary }
  929.       info :         
  930.         record
  931.           case Integer of
  932.             1 : 
  933.               (
  934.                 err : TERROR_NOTIFICATION;
  935.               );
  936.             2 : 
  937.               (
  938.                 newmail : TNEWMAIL_NOTIFICATION;
  939.               );
  940.             3 : 
  941.               (
  942.                 obj : TOBJECT_NOTIFICATION;
  943.               );
  944.             4 : 
  945.               (
  946.                 tab : TTABLE_NOTIFICATION;
  947.               );
  948.             5 : 
  949.               (
  950.                 ext : TEXTENDED_NOTIFICATION;
  951.               );
  952.             6 : 
  953.               (
  954.                 statobj : TSTATUS_OBJECT_NOTIFICATION;
  955.               );
  956.       end;
  957.     end;
  958.     
  959.   PNOTIFICATION = ^TNOTIFICATION;
  960.   
  961.   { Callback function type for MAPIAllocAdviseSink }
  962.   
  963.   TNOTIFCALLBACK = function (lpvContext : Pointer; cNotification : ULONG; 
  964.     lpNotifications : PNOTIFICATION) : Longint; stdcall;
  965.   
  966.   PNOTIFCALLBACK = ^TNOTIFCALLBACK;
  967.   
  968. (*
  969.  *  Message name for the 16-bit MAPI notififcation engine.
  970.  *  This can be used in 16-bit applications to force processing
  971.  *  of notification callbacks.
  972.  *)
  973.  
  974. const
  975.   szMAPINotificationMsg = 'MAPI Notify window message';
  976.  
  977. { IMAPIProgress Interface ------------------------------------------------- }
  978.  
  979. { Flag values for the progress indicator }
  980.  
  981. const
  982.   MAPI_TOP_LEVEL = ULONG($00000001);
  983.  
  984. { IMAPIProp Interface ----------------------------------------------------- }
  985.  
  986. { GetLastError }
  987.  
  988. {***** MAPI_UNICODE            ((ULONG) 0x80000000) above }
  989.  
  990. (*
  991.  *  Version:
  992.  *)
  993.   
  994. const
  995.   MAPI_ERROR_VERSION = $00000000;
  996.   
  997.   { GetPropList }
  998.   
  999.   {***** MAPI_UNICODE            ((ULONG) 0x80000000) above }
  1000.   
  1001.   { GetProps }
  1002.   
  1003.   {***** MAPI_UNICODE            ((ULONG) 0x80000000) above }
  1004.   
  1005.   { SaveChanges }
  1006.   
  1007.   KEEP_OPEN_READONLY = ULONG($00000001);
  1008.   KEEP_OPEN_READWRITE = ULONG($00000002);
  1009.   FORCE_SAVE = ULONG($00000004);
  1010.   
  1011.   { define MAPI_DEFERRED_ERRORS  ((ULONG) 0x00000008) below }
  1012.   
  1013.   { OpenProperty  - ulFlags }
  1014.   
  1015.   {***** MAPI_MODIFY             ((ULONG) 0x00000001) above }
  1016.   
  1017.   MAPI_CREATE = ULONG($00000002);
  1018.   STREAM_APPEND = ULONG($00000004);
  1019.   
  1020.   {***** MAPI_DEFERRED_ERRORS    ((ULONG) 0x00000008) below }
  1021.   
  1022.   { OpenProperty  - ulInterfaceOptions, IID_IMAPITable }
  1023.   
  1024.   {***** MAPI_UNICODE            ((ULONG) 0x80000000) above }
  1025.   
  1026.   { CopyTo, CopyProps }
  1027.   
  1028.   MAPI_MOVE = ULONG($00000001);
  1029.   MAPI_NOREPLACE = ULONG($00000002);
  1030.   MAPI_DECLINE_OK = ULONG($00000004);
  1031.   
  1032.                                        { also defined in mapi.h }
  1033.   MAPI_DIALOG = ULONG($00000008);
  1034.  
  1035.                                        { also defined in mapi.h }
  1036.   MAPI_USE_DEFAULT = $00000040         { Use default profile in logon }
  1037.   ;
  1038.  
  1039.   { Flags used in GetIDsFromNames  }
  1040.   
  1041.   {***** MAPI_CREATE             ((ULONG) 0x00000002) above }
  1042.   
  1043.   { Flags used in GetNamesFromIDs  (bit fields) }
  1044.   
  1045.   MAPI_NO_STRINGS = ULONG($00000001);
  1046.   MAPI_NO_IDS = ULONG($00000002);
  1047.   
  1048.   {  Union discriminator  }
  1049.   
  1050.   MNID_ID = 0;
  1051.   MNID_STRING = 1;
  1052.  
  1053. type
  1054.   TMAPINAMEID =     
  1055.     record
  1056.       lpguid : PGUID;
  1057.       ulKind : ULONG;
  1058.       Kind :         
  1059.         record
  1060.           case Integer of
  1061.             1 : 
  1062.               (
  1063.                 lID : Longint;
  1064.               );
  1065.             2 : 
  1066.               (
  1067.                 lpwstrName : PWSTR;
  1068.               );
  1069.       end;
  1070.     end;
  1071.     
  1072.   PMAPINAMEID = ^TMAPINAMEID;
  1073.   
  1074.   { Interface used for registering and issuing notification callbacks. }
  1075.   IMAPIAdviseSink =
  1076.     interface(IUnknown)
  1077.     [strIID_IMAPIAdviseSink]
  1078.       function OnNotify (cNotif : ULONG; lpNotifications : PNOTIFICATION) : ULONG; stdcall;
  1079.     end;
  1080.  
  1081.   IMAPIProgress =
  1082.     interface(IUnknown)
  1083.     [strIID_IMAPIProgress]
  1084.       function Progress (ulValue : ULONG; ulCount : ULONG; ulTotal : ULONG) : HResult; stdcall;
  1085.       function GetFlags (var lpulFlags : ULONG) : HResult; stdcall;
  1086.       function GetMax (var lpulMax : ULONG) : HResult; stdcall;
  1087.       function GetMin (var lpulMin : ULONG) : HResult; stdcall;
  1088.       function SetLimits (lpulMin : PULONG; lpulMax : PULONG; lpulFlags : PULONG) : HResult; stdcall;
  1089.     end;
  1090.  
  1091.   IMAPIProp =
  1092.     interface(IUnknown)
  1093.     [strIID_IMAPIProp]
  1094.       function GetLastError (hResult : HResult; ulFlags : ULONG;
  1095.         var lppMAPIError : PMAPIERROR) : HResult; stdcall;
  1096.       function SaveChanges (ulFlags : ULONG) : HResult; stdcall;
  1097.       function GetProps (lpPropTagArray : PSPropTagArray; ulFlags : ULONG; 
  1098.         var lpcValues : ULONG;
  1099.         var lppPropArray : PSPropValue) : HResult; stdcall;
  1100.       function GetPropList (ulFlags : ULONG;
  1101.         var lppPropTagArray : PSPropTagArray) : HResult; stdcall;
  1102.       function OpenProperty (ulPropTag : ULONG; const lpiid : TIID; 
  1103.         ulInterfaceOptions : ULONG; ulFlags : ULONG;
  1104.         var lppUnk : IUnknown) : HResult; stdcall;
  1105.       function SetProps (cValues : ULONG; lpPropArray : PSPropValue; 
  1106.         var lppProblems : PSPropProblemArray) : HResult; stdcall;
  1107.       function DeleteProps (lpPropTagArray : PSPropTagArray; 
  1108.         var lppProblems : PSPropProblemArray) : HResult; stdcall;
  1109.       function CopyTo (ciidExclude : ULONG; const rgiidExclude : TIID; 
  1110.         lpExcludeProps : PSPropTagArray; ulUIParam : ULONG; 
  1111.         lpProgress : IMAPIProgress; const lpInterface : TIID;
  1112.         lpDestObj : Pointer; ulFlags : ULONG;
  1113.         var lppProblems : PSPropProblemArray) : HResult; stdcall;
  1114.       function CopyProps (lpIncludeProps : PSPropTagArray; ulUIParam : ULONG; 
  1115.         lpProgress : IMAPIProgress; const lpInterface : TIID; lpDestObj : Pointer; 
  1116.         ulFlags : ULONG; var lppProblems : PSPropProblemArray) : HResult; stdcall;
  1117.       function GetNamesFromIDs (var lppPropTags : PSPropTagArray; 
  1118.         lpPropSetGuid : PGUID; ulFlags : ULONG; var lpcPropNames : ULONG; 
  1119.         var lpppPropNames : PMAPINAMEID) : HResult; stdcall;
  1120.       function GetIDsFromNames (cPropNames : ULONG; var lppPropNames : PMAPINAMEID; 
  1121.         ulFlags : ULONG; var lppPropTags : PSPropTagArray) : HResult; stdcall;
  1122.     end;
  1123.   
  1124. { IMAPITable Interface ---------------------------------------------------- }
  1125.  
  1126. { Table status }
  1127.   
  1128. const
  1129.   TBLSTAT_COMPLETE = ULONG(0);
  1130.   TBLSTAT_QCHANGED = ULONG(7);
  1131.   TBLSTAT_SORTING = ULONG(9);
  1132.   TBLSTAT_SORT_ERROR = ULONG(10);
  1133.   TBLSTAT_SETTING_COLS = ULONG(11);
  1134.   TBLSTAT_SETCOL_ERROR = ULONG(13);
  1135.   TBLSTAT_RESTRICTING = ULONG(14);
  1136.   TBLSTAT_RESTRICT_ERROR = ULONG(15);
  1137.   
  1138.   { Table Type }
  1139.   
  1140.   TBLTYPE_SNAPSHOT = ULONG(0);
  1141.   TBLTYPE_KEYSET = ULONG(1);
  1142.   TBLTYPE_DYNAMIC = ULONG(2);
  1143.   
  1144.   { Sort order }
  1145.   
  1146.   { bit 0: set if descending, clear if ascending }
  1147.   
  1148.   TABLE_SORT_ASCEND = ULONG($00000000);
  1149.   TABLE_SORT_DESCEND = ULONG($00000001);
  1150.   TABLE_SORT_COMBINE = ULONG($00000002);
  1151.   
  1152.   { Data structures }
  1153.   
  1154. type
  1155.   TSSortOrder =     
  1156.     record
  1157.       ulPropTag : ULONG;               { Column to sort on }
  1158.       ulOrder : ULONG;                 { Ascending, descending, combine to left }
  1159.     end;
  1160.     
  1161.   PSSortOrder = ^TSSortOrder;
  1162.   
  1163.   TSSortOrderSet =     
  1164.     record
  1165.       cSorts : ULONG;                  { Number of sort columns in aSort below}
  1166.       cCategories : ULONG;             { 0 for non-categorized, up to cSorts }
  1167.       cExpanded : ULONG;               { 0 if no categories start expanded, }
  1168.                                        {      up to cExpanded }
  1169.       aSort : array[0..MAPI_DIM - 1] of TSSortOrder;
  1170.                                        { The sort orders }
  1171.     end;
  1172.     
  1173.   PSSortOrderSet = ^TSSortOrderSet;
  1174.   
  1175. type
  1176.   TBOOKMARK = ULONG;
  1177.   
  1178. const
  1179.   BOOKMARK_BEGINNING = TBOOKMARK(0)    { Before first row }
  1180.   ;
  1181.   BOOKMARK_CURRENT = TBOOKMARK(1)      { Before current row }
  1182.   ;
  1183.   BOOKMARK_END = TBOOKMARK(2)          { After last row }
  1184.   ;
  1185.  
  1186. { Fuzzy Level }
  1187.  
  1188. const
  1189.   FL_FULLSTRING = ULONG($00000000);
  1190.   FL_SUBSTRING = ULONG($00000001);
  1191.   FL_PREFIX = ULONG($00000002);
  1192.   FL_IGNORECASE = ULONG($00010000);
  1193.   FL_IGNORENONSPACE = ULONG($00020000);
  1194.   FL_LOOSE = ULONG($00040000);
  1195.  
  1196. { Restriction types }
  1197.  
  1198. const
  1199.   RES_AND = ULONG($00000000);
  1200.   RES_OR = ULONG($00000001);
  1201.   RES_NOT = ULONG($00000002);
  1202.   RES_CONTENT = ULONG($00000003);
  1203.   RES_PROPERTY = ULONG($00000004);
  1204.   RES_COMPAREPROPS = ULONG($00000005);
  1205.   RES_BITMASK = ULONG($00000006);
  1206.   RES_SIZE = ULONG($00000007);
  1207.   RES_EXIST = ULONG($00000008);
  1208.   RES_SUBRESTRICTION = ULONG($00000009);
  1209.   RES_COMMENT = ULONG($0000000A);
  1210.  
  1211. { Relational operators. These apply to all property comparison restrictions. }
  1212.  
  1213. const
  1214.   RELOP_LT = ULONG(0)                  { <  }
  1215.   ;
  1216.   RELOP_LE = ULONG(1)                  { <= }
  1217.   ;
  1218.   RELOP_GT = ULONG(2)                  { >  }
  1219.   ;
  1220.   RELOP_GE = ULONG(3)                  { >= }
  1221.   ;
  1222.   RELOP_EQ = ULONG(4)                  { == }
  1223.   ;
  1224.   RELOP_NE = ULONG(5)                  { != }
  1225.   ;
  1226.   RELOP_RE = ULONG(6)                  { LIKE (Regular expression) }
  1227.   ;
  1228.  
  1229. { Bitmask operators, for RES_BITMASK only. }
  1230.  
  1231. const
  1232.   BMR_EQZ = ULONG(0)                   { ==0 }
  1233.   ;
  1234.   BMR_NEZ = ULONG(1)                   { !=0 }
  1235.   ;
  1236.  
  1237. { Subobject identifiers for RES_SUBRESTRICTION only. See MAPITAGS.H. }
  1238.  
  1239. { #define PR_MESSAGE_RECIPIENTS  PROP_TAG(PT_OBJECT,0x0E12) }
  1240.  
  1241. { #define PR_MESSAGE_ATTACHMENTS PROP_TAG(PT_OBJECT,0x0E13) }
  1242.  
  1243. { Restrictions }
  1244.  
  1245. type
  1246.   PSRestriction = ^TSRestriction;
  1247.  
  1248.   TSAndRestriction =
  1249.     record
  1250.       cRes : ULONG;
  1251.       lpRes : PSRestriction;
  1252.     end;
  1253.     
  1254.   TSOrRestriction =     
  1255.     record
  1256.       cRes : ULONG;
  1257.       lpRes : PSRestriction;
  1258.     end;
  1259.     
  1260.   TSNotRestriction =     
  1261.     record
  1262.       ulReserved : ULONG;
  1263.       lpRes : PSRestriction;
  1264.     end;
  1265.     
  1266.   TSContentRestriction =     
  1267.     record
  1268.       ulFuzzyLevel : ULONG;
  1269.       ulPropTag : ULONG;
  1270.       lpProp : PSPropValue;
  1271.     end;
  1272.     
  1273.   TSBitMaskRestriction =     
  1274.     record
  1275.       relBMR : ULONG;
  1276.       ulPropTag : ULONG;
  1277.       ulMask : ULONG;
  1278.     end;
  1279.     
  1280.   TSPropertyRestriction =     
  1281.     record
  1282.       relop : ULONG;
  1283.       ulPropTag : ULONG;
  1284.       lpProp : PSPropValue;
  1285.     end;
  1286.     
  1287.   TSComparePropsRestriction =     
  1288.     record
  1289.       relop : ULONG;
  1290.       ulPropTag1 : ULONG;
  1291.       ulPropTag2 : ULONG;
  1292.     end;
  1293.     
  1294.   TSSizeRestriction =     
  1295.     record
  1296.       relop : ULONG;
  1297.       ulPropTag : ULONG;
  1298.       cb : ULONG;
  1299.     end;
  1300.     
  1301.   TSExistRestriction =     
  1302.     record
  1303.       ulReserved1 : ULONG;
  1304.       ulPropTag : ULONG;
  1305.       ulReserved2 : ULONG;
  1306.     end;
  1307.     
  1308.   TSSubRestriction =     
  1309.     record
  1310.       ulSubObject : ULONG;
  1311.       lpRes : PSRestriction;
  1312.     end;
  1313.     
  1314.   TSCommentRestriction =     
  1315.     record
  1316.       cValues : ULONG;                 { # of properties in lpProp }
  1317.       lpRes : PSRestriction;
  1318.       lpProp : PSPropValue;
  1319.     end;
  1320.     
  1321.   TSRestriction =
  1322.     record
  1323.       rt : ULONG;                      { Restriction type }
  1324.       res :         
  1325.         record
  1326.           case Integer of
  1327.             1 : 
  1328.               (
  1329.                 resCompareProps : TSComparePropsRestriction;
  1330.                                        { first }
  1331.               );
  1332.             2 : 
  1333.               (
  1334.                 resAnd : TSAndRestriction;
  1335.               );
  1336.             3 : 
  1337.               (
  1338.                 resOr : TSOrRestriction;
  1339.               );
  1340.             4 : 
  1341.               (
  1342.                 resNot : TSNotRestriction;
  1343.               );
  1344.             5 : 
  1345.               (
  1346.                 resContent : TSContentRestriction;
  1347.               );
  1348.             6 : 
  1349.               (
  1350.                 resProperty : TSPropertyRestriction;
  1351.               );
  1352.             7 : 
  1353.               (
  1354.                 resBitMask : TSBitMaskRestriction;
  1355.               );
  1356.             8 : 
  1357.               (
  1358.                 resSize : TSSizeRestriction;
  1359.               );
  1360.             9 : 
  1361.               (
  1362.                 resExist : TSExistRestriction;
  1363.               );
  1364.             10 : 
  1365.               (
  1366.                 resSub : TSSubRestriction;
  1367.               );
  1368.             11 : 
  1369.               (
  1370.                 resComment : TSCommentRestriction;
  1371.               );
  1372.       end;
  1373.     end;
  1374.     
  1375. { SComparePropsRestriction is first in the union so that }
  1376.  
  1377. { static initializations of 3-value restriction work.    }
  1378.  
  1379. { Flags of the methods of IMAPITable }
  1380.  
  1381. { QueryColumn }
  1382.  
  1383. const
  1384.   TBL_ALL_COLUMNS = ULONG($00000001);
  1385.  
  1386. { QueryRows }
  1387.  
  1388. { Possible values for PR_ROW_TYPE (for categorization) }
  1389.  
  1390. const
  1391.   TBL_LEAF_ROW = ULONG(1);
  1392.   TBL_EMPTY_CATEGORY = ULONG(2);
  1393.   TBL_EXPANDED_CATEGORY = ULONG(3);
  1394.   TBL_COLLAPSED_CATEGORY = ULONG(4);
  1395.  
  1396. { Table wait flag }
  1397.  
  1398. const
  1399.   TBL_NOWAIT = ULONG($00000001);
  1400.  
  1401. { alternative name for TBL_NOWAIT }
  1402.  
  1403. const
  1404.   TBL_ASYNC = ULONG($00000001);
  1405.   TBL_BATCH = ULONG($00000002);
  1406.  
  1407. { FindRow }
  1408.  
  1409. const
  1410.   DIR_BACKWARD = ULONG($00000001);
  1411.  
  1412. { Table cursor states }
  1413.  
  1414. const
  1415.   TBL_NOADVANCE = ULONG($00000001);
  1416.  
  1417. type
  1418.   IMAPITable =
  1419.     interface(IUnknown)
  1420.     [strIID_IMAPITable]
  1421.       function GetLastError (hResult : HResult; ulFlags : ULONG;
  1422.         var lppMAPIError : PMAPIERROR) : HResult; stdcall;
  1423.       function Advise (ulEventMask : ULONG; lpAdviseSink : IMAPIAdviseSink; 
  1424.         var lpulConnection : ULONG) : HResult; stdcall;
  1425.       function Unadvise (ulConnection : ULONG) : HResult; stdcall;
  1426.       function GetStatus (var lpulTableStatus : ULONG; var lpulTableType : ULONG) : HResult; stdcall;
  1427.       function SetColumns (lpPropTagArray : PSPropTagArray; ulFlags : ULONG) : HResult; stdcall;
  1428.       function QueryColumns (ulFlags : ULONG; var lpPropTagArray : PSPropTagArray) : HResult; stdcall;
  1429.       function GetRowCount (ulFlags : ULONG; var lpulCount : ULONG) : HResult; stdcall;
  1430.       function SeekRow (bkOrigin : TBOOKMARK; lRowCount : Longint; 
  1431.         var lplRowsSought : Longint) : HResult; stdcall;
  1432.       function SeekRowApprox (ulNumerator : ULONG; ulDenominator : ULONG) : HResult; stdcall;
  1433.       function QueryPosition (var lpulRow : ULONG; var lpulNumerator : ULONG; 
  1434.         var lpulDenominator : ULONG) : HResult; stdcall;
  1435.       function FindRow (lpRestriction : PSRestriction; bkOrigin : TBOOKMARK; 
  1436.         ulFlags : ULONG) : HResult; stdcall;
  1437.       function Restrict (lpRestriction : PSRestriction; ulFlags : ULONG) : HResult; stdcall;
  1438.       function CreateBookmark (var lpbkPosition : TBOOKMARK) : HResult; stdcall;
  1439.       function FreeBookmark (bkPosition : TBOOKMARK) : HResult; stdcall;
  1440.       function SortTable (lpSortCriteria : PSSortOrderSet; ulFlags : ULONG) : HResult; stdcall;
  1441.       function QuerySortOrder (var lppSortCriteria : PSSortOrderSet) : HResult; stdcall;
  1442.       function QueryRows (lRowCount : Longint; ulFlags : ULONG; 
  1443.         var lppRows : PSRowSet) : HResult; stdcall;
  1444.       function Abort : HResult; stdcall;
  1445.       function ExpandRow (cbInstanceKey : ULONG; pbInstanceKey : PBYTE; 
  1446.         ulRowCount : ULONG; ulFlags : ULONG; var lppRows : PSRowSet; 
  1447.         var lpulMoreRows : ULONG) : HResult; stdcall;
  1448.       function CollapseRow (cbInstanceKey : ULONG; pbInstanceKey : PBYTE; 
  1449.         ulFlags : ULONG; var lpulRowCount : ULONG) : HResult; stdcall;
  1450.       function WaitForCompletion (ulFlags : ULONG; ulTimeout : ULONG; 
  1451.         var lpulTableStatus : ULONG) : HResult; stdcall;
  1452.       function GetCollapseState (ulFlags : ULONG; cbInstanceKey : ULONG; 
  1453.         lpbInstanceKey : PBYTE; var lpcbCollapseState : ULONG; 
  1454.         var lppbCollapseState : PBYTE) : HResult; stdcall;
  1455.       function SetCollapseState (ulFlags : ULONG; cbCollapseState : ULONG; 
  1456.         pbCollapseState : PBYTE; var lpbkLocation : TBOOKMARK) : HResult; stdcall;
  1457.     end;
  1458.   
  1459. { IProfSect Interface ----------------------------------------------------- }
  1460.  
  1461. { Standard section for public profile properties }
  1462.   
  1463. const
  1464.   PS_PROFILE_PROPERTIES_INIT : array[0..15] of Integer =
  1465.     (
  1466.       $98, $15, $AC, $08, $AA, $B0, $10, $1A, $8C, $93, $08, 
  1467.       $00, $2, $2A, $56, $C2
  1468.     );
  1469.  
  1470. type
  1471.   IProfSect =
  1472.     interface(IMAPIProp)
  1473.     [strIID_IProfSect]
  1474.     end;
  1475.  
  1476. { IMAPIStatus Interface --------------------------------------------------- }
  1477.  
  1478. { Values for PR_RESOURCE_TYPE, _METHODS, _FLAGS }
  1479.  
  1480. const
  1481.   MAPI_STORE_PROVIDER = ULONG(33)      { Message Store }
  1482.   ;
  1483.   MAPI_AB = ULONG(34)                  { Address Book }
  1484.   ;
  1485.   MAPI_AB_PROVIDER = ULONG(35)         { Address Book Provider }
  1486.   ;
  1487.   MAPI_TRANSPORT_PROVIDER = ULONG(36)  { Transport Provider }
  1488.   ;
  1489.   MAPI_SPOOLER = ULONG(37)             { Message Spooler }
  1490.   ;
  1491.   MAPI_PROFILE_PROVIDER = ULONG(38)    { Profile Provider }
  1492.   ;
  1493.   MAPI_SUBSYSTEM = ULONG(39)           { Overall Subsystem Status }
  1494.   ;
  1495.   MAPI_HOOK_PROVIDER = ULONG(40)       { Spooler Hook }
  1496.   ;
  1497.   STATUS_VALIDATE_STATE = ULONG($00000001);
  1498.   STATUS_SETTINGS_DIALOG = ULONG($00000002);
  1499.   STATUS_CHANGE_PASSWORD = ULONG($00000004);
  1500.   STATUS_FLUSH_QUEUES = ULONG($00000008);
  1501.   STATUS_DEFAULT_OUTBOUND = ULONG($00000001);
  1502.   STATUS_DEFAULT_STORE = ULONG($00000002);
  1503.   STATUS_PRIMARY_IDENTITY = ULONG($00000004);
  1504.   STATUS_SIMPLE_STORE = ULONG($00000008);
  1505.   STATUS_XP_PREFER_LAST = ULONG($00000010);
  1506.   STATUS_NO_PRIMARY_IDENTITY = ULONG($00000020);
  1507.   STATUS_NO_DEFAULT_STORE = ULONG($00000040);
  1508.   STATUS_TEMP_SECTION = ULONG($00000080);
  1509.   STATUS_OWN_STORE = ULONG($00000100);
  1510.   
  1511.   {***** HOOK_INBOUND            ((ULONG) 0x00000200) Defined in MAPIHOOK.H }
  1512.   
  1513.   {***** HOOK_OUTBOUND           ((ULONG) 0x00000400) Defined in MAPIHOOK.H }
  1514.   
  1515.   STATUS_NEED_IPM_TREE = ULONG($00000800);
  1516.   STATUS_PRIMARY_STORE = ULONG($00001000);
  1517.   STATUS_SECONDARY_STORE = ULONG($00002000);
  1518.   
  1519.   (*
  1520.    * PR_STATUS_CODE bit. Low 16 bits for common values; High 16 bits
  1521.    * for provider type-specific values. (DCR 304)
  1522.    *)
  1523.   
  1524.   STATUS_AVAILABLE = ULONG($00000001);
  1525.   STATUS_OFFLINE = ULONG($00000002);
  1526.   STATUS_FAILURE = ULONG($00000004);
  1527.   
  1528.   { Transport values of PR_STATUS_CODE }
  1529.   
  1530.   STATUS_INBOUND_ENABLED = ULONG($00010000);
  1531.   STATUS_INBOUND_ACTIVE = ULONG($00020000);
  1532.   STATUS_INBOUND_FLUSH = ULONG($00040000);
  1533.   STATUS_OUTBOUND_ENABLED = ULONG($00100000);
  1534.   STATUS_OUTBOUND_ACTIVE = ULONG($00200000);
  1535.   STATUS_OUTBOUND_FLUSH = ULONG($00400000);
  1536.   STATUS_REMOTE_ACCESS = ULONG($00800000);
  1537.   
  1538.   { ValidateState flags }
  1539.   
  1540.   SUPPRESS_UI = ULONG($00000001);
  1541.   REFRESH_XP_HEADER_CACHE = ULONG($00010000);
  1542.   PROCESS_XP_HEADER_CACHE = ULONG($00020000);
  1543.   FORCE_XP_CONNECT = ULONG($00040000);
  1544.   FORCE_XP_DISCONNECT = ULONG($00080000);
  1545.   CONFIG_CHANGED = ULONG($00100000);
  1546.   ABORT_XP_HEADER_OPERATION = ULONG($00200000);
  1547.   SHOW_XP_SESSION_UI = ULONG($00400000);
  1548.   
  1549.   { SettingsDialog flags }
  1550.   
  1551.   UI_READONLY = ULONG($00000001);
  1552.   
  1553.   { FlushQueues flags }
  1554.   
  1555.   FLUSH_UPLOAD = ULONG($00000002);
  1556.   FLUSH_DOWNLOAD = ULONG($00000004);
  1557.   FLUSH_FORCE = ULONG($00000008);
  1558.   FLUSH_NO_UI = ULONG($00000010);
  1559.   FLUSH_ASYNC_OK = ULONG($00000020);
  1560.  
  1561. type
  1562.   IMAPIStatus =
  1563.     interface(IMAPIProp)
  1564.     [strIID_IMAPIStatus]
  1565.       function ValidateState (ulUIParam : ULONG; ulFlags : ULONG) : HResult; stdcall;
  1566.       function SettingsDialog (ulUIParam : ULONG; ulFlags : ULONG) : HResult; stdcall;
  1567.       function ChangePassword (lpOldPass : PChar; lpNewPass : PChar; ulFlags : ULONG) : HResult; stdcall;
  1568.       function FlushQueues (ulUIParam : ULONG; cbTargetTransport : ULONG; 
  1569.         lpTargetTransport : PENTRYID; ulFlags : ULONG) : HResult; stdcall;
  1570.     end;
  1571.   
  1572. { IMAPIContainer Interface ------------------------------------------------ }
  1573.  
  1574. { Flags for OpenEntry() }
  1575.  
  1576. {***** MAPI_MODIFY             ((ULONG) 0x00000001) above }
  1577.  
  1578. {***** MAPI_DEFERRED_ERRORS    ((ULONG) 0x00000008) below }
  1579.   
  1580. const
  1581.   MAPI_BEST_ACCESS = ULONG($00000010);
  1582.   
  1583.   { GetContentsTable() }
  1584.   
  1585.   {***** MAPI_UNICODE            ((ULONG) 0x80000000) above }
  1586.   
  1587.   {***** MAPI_DEFERRED_ERRORS    ((ULONG) 0x00000008) below }
  1588.   
  1589.   {***** MAPI_ASSOCIATED         ((ULONG) 0x00000040) below }
  1590.   
  1591.   { GetHierarchyTable() }
  1592.   
  1593.   {***** MAPI_UNICODE            ((ULONG) 0x80000000) above }
  1594.   
  1595.   CONVENIENT_DEPTH = ULONG($00000001);
  1596.   
  1597.   {***** MAPI_DEFERRED_ERRORS    ((ULONG) 0x00000008) below }
  1598.   
  1599.   { GetSearchCriteria }
  1600.   
  1601.   {***** MAPI_UNICODE            ((ULONG) 0x80000000) above }
  1602.   
  1603.   SEARCH_RUNNING = ULONG($00000001);
  1604.   SEARCH_REBUILD = ULONG($00000002);
  1605.   SEARCH_RECURSIVE = ULONG($00000004);
  1606.   SEARCH_FOREGROUND = ULONG($00000008);
  1607.   
  1608.   { SetSearchCriteria }
  1609.   
  1610.   STOP_SEARCH = ULONG($00000001);
  1611.   RESTART_SEARCH = ULONG($00000002);
  1612.   RECURSIVE_SEARCH = ULONG($00000004);
  1613.   SHALLOW_SEARCH = ULONG($00000008);
  1614.   FOREGROUND_SEARCH = ULONG($00000010);
  1615.   BACKGROUND_SEARCH = ULONG($00000020);
  1616.  
  1617. type
  1618.   IMAPIContainer =
  1619.     interface(IMAPIProp)
  1620.     [strIID_IMAPIContainer]
  1621.       function GetContentsTable (ulFlags : ULONG; var lppTable : IMAPITable) : HResult; stdcall;
  1622.       function GetHierarchyTable (ulFlags : ULONG; var lppTable : IMAPITable) : HResult; stdcall;
  1623.       function OpenEntry (cbEntryID : ULONG; lpEntryID : PENTRYID; const lpInterface : TIID; 
  1624.         ulFlags : ULONG; var lpulObjType : ULONG; var lppUnk : IUnknown) : HResult; stdcall;
  1625.       function SetSearchCriteria (lpRestriction : PSRestriction; 
  1626.         lpContainerList : PENTRYLIST; ulSearchFlags : ULONG) : HResult; stdcall;
  1627.       function GetSearchCriteria (ulFlags : ULONG; var lppRestriction : PSRestriction; 
  1628.         var lppContainerList : PENTRYLIST; var lpulSearchState : ULONG) : HResult; stdcall;
  1629.     end;
  1630.   
  1631. { IABContainer Interface -------------------------------------------------- }
  1632.  
  1633. (*
  1634.  *  IABContainer PR_CONTAINER_FLAGS values
  1635.  *  If AB_UNMODIFIABLE and AB_MODIFIABLE are both set, it means the container
  1636.  *  doesn't know if it's modifiable or not, and the client should
  1637.  *  try to modify the contents but we won't expect it to work.
  1638.  *  If the AB_RECIPIENTS flag is set and neither AB_MODIFIABLE or AB_UNMODIFIABLE
  1639.  *  bits are set, it is an error.
  1640.  *)
  1641.   
  1642.   TFlagList =     
  1643.     record
  1644.       cFlags : ULONG;
  1645.       ulFlag : array[0..MAPI_DIM - 1] of ULONG;
  1646.     end;
  1647.     
  1648.   PFlagList = ^TFlagList;
  1649.   
  1650. (*
  1651.  *  Container flags
  1652.  *)
  1653.  
  1654. const
  1655.   AB_RECIPIENTS = ULONG($00000001);
  1656.   AB_SUBCONTAINERS = ULONG($00000002);
  1657.   AB_MODIFIABLE = ULONG($00000004);
  1658.   AB_UNMODIFIABLE = ULONG($00000008);
  1659.   AB_FIND_ON_OPEN = ULONG($00000010);
  1660.   AB_NOT_DEFAULT = ULONG($00000020);
  1661.  
  1662. { CreateEntry() }
  1663.  
  1664. const
  1665.   CREATE_CHECK_DUP_STRICT = ULONG($00000001);
  1666.   CREATE_CHECK_DUP_LOOSE = ULONG($00000002);
  1667.   CREATE_REPLACE = ULONG($00000004);
  1668.  
  1669. { ResolveNames() - ulFlags }
  1670.  
  1671. {***** MAPI_UNICODE            ((ULONG) 0x80000000) above }
  1672.  
  1673. { ResolveNames() - rgulFlags }
  1674.  
  1675. const
  1676.   MAPI_UNRESOLVED = ULONG($00000000);
  1677.   MAPI_AMBIGUOUS = ULONG($00000001);
  1678.   MAPI_RESOLVED = ULONG($00000002);
  1679.  
  1680. type
  1681.   IABContainer =
  1682.     interface(IMAPIContainer)
  1683.     [strIID_IABContainer]
  1684.       function CreateEntry (cbEntryID : ULONG; lpEntryID : PENTRYID;
  1685.         ulCreateFlags : ULONG; var lppMAPIPropEntry : IMAPIProp) : HResult; stdcall;
  1686.       function CopyEntries (lpEntries : PENTRYLIST; ulUIParam : ULONG; 
  1687.         lpProgress : IMAPIProgress; ulFlags : ULONG) : HResult; stdcall;
  1688.       function DeleteEntries (lpEntries : PENTRYLIST; ulFlags : ULONG) : HResult; stdcall;
  1689.       function ResolveNames (lpPropTagArray : PSPropTagArray; ulFlags : ULONG; 
  1690.         lpAdrList : PADRLIST; lpFlagList : PFlagList) : HResult; stdcall;
  1691.     end;
  1692.   
  1693. { IMailUser Interface ----------------------------------------------------- }
  1694.  
  1695. {  Any call which can create a one-off entryID (i.e. MAPISupport::CreateOneOff
  1696.    or IAdrBook::CreateOneOff) can encode the value for PR_SEND_RICH_INFO by
  1697.    passing in the following flag in the ulFlags parameter.  Setting this flag
  1698.    indicates that PR_SEND_RICH_INFO will be FALSE.
  1699. }
  1700.   
  1701. const
  1702.   MAPI_SEND_NO_RICH_INFO = ULONG($00010000);
  1703.   
  1704.   { Values of PR_NDR_DIAG_CODE }
  1705.  
  1706.   MAPI_DIAG_NO_DIAGNOSTIC = -1;
  1707.   MAPI_DIAG_OR_NAME_UNRECOGNIZED = 0;
  1708.   MAPI_DIAG_OR_NAME_AMBIGUOUS = 1;
  1709.   MAPI_DIAG_MTS_CONGESTED = 2;
  1710.   MAPI_DIAG_LOOP_DETECTED = 3;
  1711.   MAPI_DIAG_RECIPIENT_UNAVAILABLE = 4;
  1712.   MAPI_DIAG_MAXIMUM_TIME_EXPIRED = 5;
  1713.   MAPI_DIAG_EITS_UNSUPPORTED = 6;
  1714.   MAPI_DIAG_CONTENT_TOO_LONG = 7;
  1715.   MAPI_DIAG_IMPRACTICAL_TO_CONVERT = 8;
  1716.   MAPI_DIAG_PROHIBITED_TO_CONVERT = 9;
  1717.   MAPI_DIAG_CONVERSION_UNSUBSCRIBED = 10;
  1718.   MAPI_DIAG_PARAMETERS_INVALID = 11;
  1719.   MAPI_DIAG_CONTENT_SYNTAX_IN_ERROR = 12;
  1720.   MAPI_DIAG_LENGTH_CONSTRAINT_VIOLATD = 13;
  1721.   MAPI_DIAG_NUMBER_CONSTRAINT_VIOLATD = 14;
  1722.   MAPI_DIAG_CONTENT_TYPE_UNSUPPORTED = 15;
  1723.   MAPI_DIAG_TOO_MANY_RECIPIENTS = 16;
  1724.   MAPI_DIAG_NO_BILATERAL_AGREEMENT = 17;
  1725.   MAPI_DIAG_CRITICAL_FUNC_UNSUPPORTED = 18;
  1726.   MAPI_DIAG_CONVERSION_LOSS_PROHIB = 19;
  1727.   MAPI_DIAG_LINE_TOO_LONG = 20;
  1728.   MAPI_DIAG_PAGE_TOO_LONG = 21;
  1729.   MAPI_DIAG_PICTORIAL_SYMBOL_LOST = 22;
  1730.   MAPI_DIAG_PUNCTUATION_SYMBOL_LOST = 23;
  1731.   MAPI_DIAG_ALPHABETIC_CHARACTER_LOST = 24;
  1732.   MAPI_DIAG_MULTIPLE_INFO_LOSSES = 25;
  1733.   MAPI_DIAG_REASSIGNMENT_PROHIBITED = 26;
  1734.   MAPI_DIAG_REDIRECTION_LOOP_DETECTED = 27;
  1735.   MAPI_DIAG_EXPANSION_PROHIBITED = 28;
  1736.   MAPI_DIAG_SUBMISSION_PROHIBITED = 29;
  1737.   MAPI_DIAG_EXPANSION_FAILED = 30;
  1738.   MAPI_DIAG_RENDITION_UNSUPPORTED = 31;
  1739.   MAPI_DIAG_MAIL_ADDRESS_INCORRECT = 32;
  1740.   MAPI_DIAG_MAIL_OFFICE_INCOR_OR_INVD = 33;
  1741.   MAPI_DIAG_MAIL_ADDRESS_INCOMPLETE = 34;
  1742.   MAPI_DIAG_MAIL_RECIPIENT_UNKNOWN = 35;
  1743.   MAPI_DIAG_MAIL_RECIPIENT_DECEASED = 36;
  1744.   MAPI_DIAG_MAIL_ORGANIZATION_EXPIRED = 37;
  1745.   MAPI_DIAG_MAIL_REFUSED = 38;
  1746.   MAPI_DIAG_MAIL_UNCLAIMED = 39;
  1747.   MAPI_DIAG_MAIL_RECIPIENT_MOVED = 40;
  1748.   MAPI_DIAG_MAIL_RECIPIENT_TRAVELLING = 41;
  1749.   MAPI_DIAG_MAIL_RECIPIENT_DEPARTED = 42;
  1750.   MAPI_DIAG_MAIL_NEW_ADDRESS_UNKNOWN = 43;
  1751.   MAPI_DIAG_MAIL_FORWARDING_UNWANTED = 44;
  1752.   MAPI_DIAG_MAIL_FORWARDING_PROHIB = 45;
  1753.   MAPI_DIAG_SECURE_MESSAGING_ERROR = 46;
  1754.   MAPI_DIAG_DOWNGRADING_IMPOSSIBLE = 47;
  1755.  
  1756.   { Values of PR_DELIVERY_POINT (MH_T_DELIVERY_POINT) }
  1757.   
  1758.   MAPI_MH_DP_PUBLIC_UA = ULONG(0);
  1759.   MAPI_MH_DP_PRIVATE_UA = ULONG(1);
  1760.   MAPI_MH_DP_MS = ULONG(2);
  1761.   MAPI_MH_DP_ML = ULONG(3);
  1762.   MAPI_MH_DP_PDAU = ULONG(4);
  1763.   MAPI_MH_DP_PDS_PATRON = ULONG(5);
  1764.   MAPI_MH_DP_OTHER_AU = ULONG(6);
  1765.  
  1766. { IMAPIFolder Interface --------------------------------------------------- }
  1767.  
  1768. { IMAPIFolder folder type (enum) }
  1769.   
  1770. const
  1771.   FOLDER_ROOT = ULONG($00000000);
  1772.   FOLDER_GENERIC = ULONG($00000001);
  1773.   FOLDER_SEARCH = ULONG($00000002);
  1774.   
  1775.   { CreateMessage }
  1776.   
  1777.   {***** MAPI_DEFERRED_ERRORS    ((ULONG) 0x00000008) below }
  1778.   
  1779.   {***** MAPI_ASSOCIATED         ((ULONG) 0x00000040) below }
  1780.   
  1781.   { CopyMessages }
  1782.   
  1783.   MESSAGE_MOVE = ULONG($00000001);
  1784.   MESSAGE_DIALOG = ULONG($00000002);
  1785.   
  1786.   {***** MAPI_DECLINE_OK         ((ULONG) 0x00000004) above }
  1787.   
  1788.   { CreateFolder }
  1789.   
  1790.   OPEN_IF_EXISTS = ULONG($00000001);
  1791.   
  1792.   {***** MAPI_DEFERRED_ERRORS    ((ULONG) 0x00000008) below }
  1793.   
  1794.   {***** MAPI_UNICODE            ((ULONG) 0x80000000) above }
  1795.   
  1796.   { DeleteFolder }
  1797.   
  1798.   DEL_MESSAGES = ULONG($00000001);
  1799.   FOLDER_DIALOG = ULONG($00000002);
  1800.   DEL_FOLDERS = ULONG($00000004);
  1801.   
  1802.   { EmptyFolder }
  1803.   
  1804.   DEL_ASSOCIATED = ULONG($00000008);
  1805.   
  1806.   { CopyFolder }
  1807.   
  1808.   FOLDER_MOVE = ULONG($00000001);
  1809.   
  1810.   {***** FOLDER_DIALOG           ((ULONG) 0x00000002) above }
  1811.   
  1812.   {***** MAPI_DECLINE_OK         ((ULONG) 0x00000004) above }
  1813.   
  1814.   COPY_SUBFOLDERS = ULONG($00000010);
  1815.   
  1816.   {***** MAPI_UNICODE            ((ULONG) 0x80000000) above }
  1817.  
  1818.   { SetReadFlags }
  1819.   
  1820.   {***** SUPPRESS_RECEIPT        ((ULONG) 0x00000001) below }
  1821.   
  1822.   {***** FOLDER_DIALOG           ((ULONG) 0x00000002) above }
  1823.   
  1824.   {***** CLEAR_READ_FLAG         ((ULONG) 0x00000004) below }
  1825.   
  1826.   {***** MAPI_DEFERRED_ERRORS    ((ULONG) 0x00000008) below }
  1827.   
  1828.   {***** GENERATE_RECEIPT_ONLY   ((ULONG) 0x00000010) below }
  1829.   
  1830.   {***** CLEAR_RN_PENDING        ((ULONG) 0x00000020) below }
  1831.   
  1832.   {***** CLEAR_NRN_PENDING       ((ULONG) 0x00000040) below }
  1833.   
  1834.   { GetMessageStatus }
  1835.   
  1836.   MSGSTATUS_HIGHLIGHTED = ULONG($00000001);
  1837.   MSGSTATUS_TAGGED = ULONG($00000002);
  1838.   MSGSTATUS_HIDDEN = ULONG($00000004);
  1839.   MSGSTATUS_DELMARKED = ULONG($00000008);
  1840.   
  1841.   { Bits for remote message status }
  1842.   
  1843.   MSGSTATUS_REMOTE_DOWNLOAD = ULONG($00001000);
  1844.   MSGSTATUS_REMOTE_DELETE = ULONG($00002000);
  1845.   
  1846.   { SaveContentsSort }
  1847.   
  1848.   RECURSIVE_SORT = ULONG($00000002);
  1849.   
  1850.   { PR_STATUS property }
  1851.   
  1852.   FLDSTATUS_HIGHLIGHTED = ULONG($00000001);
  1853.   FLDSTATUS_TAGGED = ULONG($00000002);
  1854.   FLDSTATUS_HIDDEN = ULONG($00000004);
  1855.   FLDSTATUS_DELMARKED = ULONG($00000008);
  1856.  
  1857. { IMessage Interface ------------------------------------------------------ }
  1858.  
  1859. { SubmitMessage }
  1860.   
  1861. const
  1862.   FORCE_SUBMIT = ULONG($00000001);
  1863.   
  1864.   { Flags defined in PR_MESSAGE_FLAGS }
  1865.   
  1866.   MSGFLAG_READ = ULONG($00000001);
  1867.   MSGFLAG_UNMODIFIED = ULONG($00000002);
  1868.   MSGFLAG_SUBMIT = ULONG($00000004);
  1869.   MSGFLAG_UNSENT = ULONG($00000008);
  1870.   MSGFLAG_HASATTACH = ULONG($00000010);
  1871.   MSGFLAG_FROMME = ULONG($00000020);
  1872.   MSGFLAG_ASSOCIATED = ULONG($00000040);
  1873.   MSGFLAG_RESEND = ULONG($00000080);
  1874.   MSGFLAG_RN_PENDING = ULONG($00000100);
  1875.   MSGFLAG_NRN_PENDING = ULONG($00000200);
  1876.   
  1877.   { Flags defined in PR_SUBMIT_FLAGS }
  1878.  
  1879.   SUBMITFLAG_LOCKED = ULONG($00000001);
  1880.   SUBMITFLAG_PREPROCESS = ULONG($00000002);
  1881.   
  1882.   { GetAttachmentTable() }
  1883.   
  1884.   {***** MAPI_UNICODE            ((ULONG) 0x80000000) above }
  1885.   
  1886.   { GetRecipientTable() }
  1887.   
  1888.   {***** MAPI_UNICODE            ((ULONG) 0x80000000) above }
  1889.   
  1890.   { ModifyRecipients }
  1891.   
  1892.   { ((ULONG) 0x00000001 is not a valid flag on ModifyRecipients. }
  1893.   
  1894.   MODRECIP_ADD = ULONG($00000002);
  1895.   MODRECIP_MODIFY = ULONG($00000004);
  1896.   MODRECIP_REMOVE = ULONG($00000008);
  1897.   
  1898.   { SetReadFlag }
  1899.   
  1900.   SUPPRESS_RECEIPT = ULONG($00000001);
  1901.   CLEAR_READ_FLAG = ULONG($00000004);
  1902.   
  1903.   {***** MAPI_DEFERRED_ERRORS    ((ULONG) 0x00000008) below }
  1904.   
  1905.   GENERATE_RECEIPT_ONLY = ULONG($00000010);
  1906.   CLEAR_RN_PENDING = ULONG($00000020);
  1907.   CLEAR_NRN_PENDING = ULONG($00000040);
  1908.   
  1909.   { DeleteAttach }
  1910.   
  1911.   ATTACH_DIALOG = ULONG($00000001);
  1912.   
  1913.   { PR_SECURITY values }
  1914.   
  1915.   SECURITY_SIGNED = ULONG($00000001);
  1916.   SECURITY_ENCRYPTED = ULONG($00000002);
  1917.   
  1918.   { PR_PRIORITY values }
  1919.   
  1920.   PRIO_URGENT = Longint(1);
  1921.   PRIO_NORMAL = Longint(0);
  1922.   PRIO_NONURGENT = Longint(-1);
  1923.   
  1924.   { PR_SENSITIVITY values }
  1925.   
  1926.   SENSITIVITY_NONE = ULONG($00000000);
  1927.   SENSITIVITY_PERSONAL = ULONG($00000001);
  1928.   SENSITIVITY_PRIVATE = ULONG($00000002);
  1929.   SENSITIVITY_COMPANY_CONFIDENTIAL = ULONG($00000003);
  1930.   
  1931.   { PR_IMPORTANCE values }
  1932.   
  1933.   IMPORTANCE_LOW = Longint(0);
  1934.   IMPORTANCE_NORMAL = Longint(1);
  1935.   IMPORTANCE_HIGH = Longint(2);
  1936.  
  1937. { IMsgStore Interface ----------------------------------------------------- }
  1938.  
  1939. {  PR_STORE_SUPPORT_MASK bits }
  1940.   
  1941. const
  1942.   STORE_ENTRYID_UNIQUE = ULONG($00000001);
  1943.   STORE_READONLY = ULONG($00000002);
  1944.   STORE_SEARCH_OK = ULONG($00000004);
  1945.   STORE_MODIFY_OK = ULONG($00000008);
  1946.   STORE_CREATE_OK = ULONG($00000010);
  1947.   STORE_ATTACH_OK = ULONG($00000020);
  1948.   STORE_OLE_OK = ULONG($00000040);
  1949.   STORE_SUBMIT_OK = ULONG($00000080);
  1950.   STORE_NOTIFY_OK = ULONG($00000100);
  1951.   STORE_MV_PROPS_OK = ULONG($00000200);
  1952.   STORE_CATEGORIZE_OK = ULONG($00000400);
  1953.   STORE_RTF_OK = ULONG($00000800);
  1954.   STORE_RESTRICTION_OK = ULONG($00001000);
  1955.   STORE_SORT_OK = ULONG($00002000);
  1956.   STORE_PUBLIC_FOLDERS = ULONG($00004000);
  1957.   STORE_UNCOMPRESSED_RTF = ULONG($00008000);
  1958.   
  1959.   { PR_STORE_STATE bits, try not to collide with PR_STORE_SUPPORT_MASK }
  1960.  
  1961.   STORE_HAS_SEARCHES = ULONG($01000000);
  1962.   
  1963.   { OpenEntry() }
  1964.   
  1965.   {***** MAPI_MODIFY             ((ULONG) 0x00000001) above }
  1966.   
  1967.   {***** MAPI_DEFERRED_ERRORS    ((ULONG) 0x00000008) below }
  1968.   
  1969.   {***** MAPI_BEST_ACCESS        ((ULONG) 0x00000010) above }
  1970.   
  1971.   { SetReceiveFolder() }
  1972.   
  1973.   {***** MAPI_UNICODE            ((ULONG) 0x80000000) above }
  1974.   
  1975.   { GetReceiveFolder() }
  1976.   
  1977.   {***** MAPI_UNICODE            ((ULONG) 0x80000000) above }
  1978.   
  1979.   { GetReceiveFolderTable() }
  1980.   
  1981.   {***** MAPI_DEFERRED_ERRORS    ((ULONG) 0x00000008) below }
  1982.   
  1983.   { StoreLogoff() }
  1984.   
  1985.   LOGOFF_NO_WAIT = ULONG($00000001);
  1986.   LOGOFF_ORDERLY = ULONG($00000002);
  1987.   LOGOFF_PURGE = ULONG($00000004);
  1988.   LOGOFF_ABORT = ULONG($00000008);
  1989.   LOGOFF_QUIET = ULONG($00000010);
  1990.   LOGOFF_COMPLETE = ULONG($00010000);
  1991.   LOGOFF_INBOUND = ULONG($00020000);
  1992.   LOGOFF_OUTBOUND = ULONG($00040000);
  1993.   LOGOFF_OUTBOUND_QUEUE = ULONG($00080000);
  1994.   
  1995.   { SetLockState() }
  1996.   
  1997.   MSG_LOCKED = ULONG($00000001);
  1998.   MSG_UNLOCKED = ULONG($00000000);
  1999.   
  2000.   { Flag bits for PR_VALID_FOLDER_MASK }
  2001.  
  2002.   FOLDER_IPM_SUBTREE_VALID = ULONG($00000001);
  2003.   FOLDER_IPM_INBOX_VALID = ULONG($00000002);
  2004.   FOLDER_IPM_OUTBOX_VALID = ULONG($00000004);
  2005.   FOLDER_IPM_WASTEBASKET_VALID = ULONG($00000008);
  2006.   FOLDER_IPM_SENTMAIL_VALID = ULONG($00000010);
  2007.   FOLDER_VIEWS_VALID = ULONG($00000020);
  2008.   FOLDER_COMMON_VIEWS_VALID = ULONG($00000040);
  2009.   FOLDER_FINDER_VALID = ULONG($00000080);
  2010.  
  2011. { IDistList Interface ----------------------------------------------------- }
  2012.  
  2013. { --------------------------------- }
  2014.  
  2015. { Address Book interface definition }
  2016.  
  2017. { ADRPARM ulFlags - top 4 bits used for versioning }
  2018.  
  2019. {  Current versions of ADRPARM  }
  2020.   
  2021. const
  2022.   ADRPARM_HELP_CTX = ULONG($00000000);
  2023.   
  2024.   {  ulFlags   - bit fields }
  2025.   
  2026.   DIALOG_MODAL = ULONG($00000001);
  2027.   DIALOG_SDI = ULONG($00000002);
  2028.   DIALOG_OPTIONS = ULONG($00000004);
  2029.   ADDRESS_ONE = ULONG($00000008);
  2030.   AB_SELECTONLY = ULONG($00000010);
  2031.   AB_RESOLVE = ULONG($00000020);
  2032.   
  2033. { --------------------------------- }
  2034.  
  2035. {  PR_DISPLAY_TYPEs                 }
  2036.  
  2037. (*
  2038.  *  These standard display types are
  2039.  *  by default handled by MAPI.
  2040.  *  They have default icons associated
  2041.  *  with them.
  2042.  *)
  2043.  
  2044.   {  For address book contents tables }
  2045.  
  2046.   DT_MAILUSER = ULONG($00000000);
  2047.   DT_DISTLIST = ULONG($00000001);
  2048.   DT_FORUM = ULONG($00000002);
  2049.   DT_AGENT = ULONG($00000003);
  2050.   DT_ORGANIZATION = ULONG($00000004);
  2051.   DT_PRIVATE_DISTLIST = ULONG($00000005);
  2052.   DT_REMOTE_MAILUSER = ULONG($00000006);
  2053.  
  2054.   {  For address book hierarchy tables }
  2055.  
  2056.   DT_MODIFIABLE = ULONG($00010000);
  2057.   DT_GLOBAL = ULONG($00020000);
  2058.   DT_LOCAL = ULONG($00030000);
  2059.   DT_WAN = ULONG($00040000);
  2060.   DT_NOT_SPECIFIC = ULONG($00050000);
  2061.   
  2062.   {  For folder hierarchy tables }
  2063.   
  2064.   DT_FOLDER = ULONG($01000000);
  2065.   DT_FOLDER_LINK = ULONG($02000000);
  2066.   DT_FOLDER_SPECIAL = ULONG($04000000);
  2067.   
  2068.   {  Accelerator callback for DIALOG_SDI form of AB UI }
  2069.   
  2070. type
  2071.   TACCELERATEABSDI = function (ulUIParam : ULONG; lpvmsg : Pointer) : BOOL; stdcall;
  2072.   
  2073.   PFNABSDI = ^TACCELERATEABSDI;
  2074.   
  2075. {  Callback to application telling it that the DIALOG_SDI form of the }
  2076.  
  2077. {  AB UI has been dismissed.  This is so that the above LPFNABSDI     }
  2078.  
  2079. {  function doesn't keep being called.                                }
  2080.  
  2081. type
  2082.   TDISMISSMODELESS = function (ulUIParam : ULONG; lpvContext : Pointer) : Pointer; stdcall;
  2083.   
  2084.   PFNDISMISS = ^TDISMISSMODELESS;
  2085.   
  2086. (*
  2087.  * Prototype for the client function hooked to an optional button on
  2088.  * the address book dialog
  2089.  *)
  2090.  
  2091. type
  2092.   PFNBUTTON = function (ulUIParam : ULONG; lpvContext : Pointer; 
  2093.     cbEntryID : ULONG; lpSelection : PENTRYID; ulFlags : ULONG) : SCODE; stdcall;
  2094.   
  2095. { Parameters for the address book dialog }
  2096.  
  2097. type
  2098.   TADRPARM =     
  2099.     record
  2100.       cbABContEntryID : ULONG;
  2101.       lpABContEntryID : PENTRYID;
  2102.       ulFlags : ULONG;
  2103.       lpReserved : Pointer;
  2104.       ulHelpContext : ULONG;
  2105.       lpszHelpFileName : PChar;
  2106.       lpfnABSDI : PFNABSDI;
  2107.       lpfnDismiss : PFNDISMISS;
  2108.       lpvDismissContext : Pointer;
  2109.       lpszCaption : PChar;
  2110.       lpszNewEntryTitle : PChar;
  2111.       lpszDestWellsTitle : PChar;
  2112.       cDestFields : ULONG;
  2113.       nDestFieldFocus : ULONG;
  2114.       lppszDestTitles : ^PChar;
  2115.       lpulDestComps : ^ULONG;
  2116.       lpContRestriction : PSRestriction;
  2117.       lpHierRestriction : PSRestriction;
  2118.     end;
  2119.     
  2120.   PADRPARM = ^TADRPARM;
  2121.   
  2122. { ------------ }
  2123.  
  2124. { Random flags }
  2125.  
  2126. { Flag for deferred error }
  2127.  
  2128. const
  2129.   MAPI_DEFERRED_ERRORS = ULONG($00000008);
  2130.  
  2131. { Flag for creating and using Folder Associated Information Messages }
  2132.  
  2133. const
  2134.   MAPI_ASSOCIATED = ULONG($00000040);
  2135.  
  2136. { Flags for OpenMessageStore() }
  2137.  
  2138. const
  2139.   MDB_NO_DIALOG = ULONG($00000001);
  2140.   MDB_WRITE = ULONG($00000004);
  2141.  
  2142. {***** MAPI_DEFERRED_ERRORS    ((ULONG) 0x00000008) above }
  2143.  
  2144. {***** MAPI_BEST_ACCESS        ((ULONG) 0x00000010) above }
  2145.  
  2146. const
  2147.   MDB_TEMPORARY = ULONG($00000020);
  2148.   MDB_NO_MAIL = ULONG($00000080);
  2149.  
  2150. { Flags for OpenAddressBook }
  2151.  
  2152. const
  2153.   AB_NO_DIALOG = ULONG($00000001);
  2154.  
  2155. { IMAPIControl Interface -------------------------------------------------- }
  2156.  
  2157. { Interface used in controls (particularly the button) defined by }
  2158.  
  2159. { Display Tables. }
  2160.  
  2161. {  Flags for GetState }
  2162.  
  2163. const
  2164.   MAPI_ENABLED = ULONG($00000000);
  2165.   MAPI_DISABLED = ULONG($00000001);
  2166.  
  2167. type
  2168.   IMAPIControl =
  2169.     interface(IUnknown)
  2170.     [strIID_IMAPIControl]  
  2171.       function GetLastError (hResult : HResult; ulFlags : ULONG;
  2172.         var lppMAPIError : PMAPIERROR) : HResult; stdcall;
  2173.       function Activate (ulFlags : ULONG; ulUIParam : ULONG) : HResult; stdcall;
  2174.       function GetState (ulFlags : ULONG; var lpulState : ULONG) : HResult; stdcall;
  2175.     end;
  2176.  
  2177. { Display Tables ---------------------------------------------------------- }
  2178.  
  2179. { Flags used in display tables - that is, PR_CONTROL_FLAGS }
  2180.  
  2181. const
  2182.   DT_MULTILINE = ULONG($00000001);
  2183.   DT_EDITABLE = ULONG($00000002);
  2184.   DT_REQUIRED = ULONG($00000004);
  2185.   DT_SET_IMMEDIATE = ULONG($00000008);
  2186.   DT_PASSWORD_EDIT = ULONG($00000010);
  2187.   DT_ACCEPT_DBCS = ULONG($00000020);
  2188.   DT_SET_SELECTION = ULONG($00000040);
  2189.  
  2190. { Display Table structures }
  2191.  
  2192. const
  2193.   DTCT_LABEL = ULONG($00000000);
  2194.   DTCT_EDIT = ULONG($00000001);
  2195.   DTCT_LBX = ULONG($00000002);
  2196.   DTCT_COMBOBOX = ULONG($00000003);
  2197.   DTCT_DDLBX = ULONG($00000004);
  2198.   DTCT_CHECKBOX = ULONG($00000005);
  2199.   DTCT_GROUPBOX = ULONG($00000006);
  2200.   DTCT_BUTTON = ULONG($00000007);
  2201.   DTCT_PAGE = ULONG($00000008);
  2202.   DTCT_RADIOBUTTON = ULONG($00000009);
  2203.   DTCT_MVLISTBOX = ULONG($0000000);
  2204.   DTCT_MVDDLBX = ULONG($0000000C);
  2205.  
  2206. { Labels }
  2207.  
  2208. { Valid ulFlags:
  2209.  *   MAPI_UNICODE
  2210.  }
  2211.  
  2212. type
  2213.   TDTBLLABEL =     
  2214.     record
  2215.       ulbLpszLabelName : ULONG;
  2216.       ulFlags : ULONG;
  2217.     end;
  2218.     
  2219.   PDTBLLABEL = ^TDTBLLABEL;
  2220.   
  2221. {  Simple Text Edits  }
  2222.  
  2223. { Valid ulFlags:
  2224.  *   MAPI_UNICODE
  2225.  }
  2226.  
  2227. type
  2228.   TDTBLEDIT =     
  2229.     record
  2230.       ulbLpszCharsAllowed : ULONG;
  2231.       ulFlags : ULONG;
  2232.       ulNumCharsAllowed : ULONG;
  2233.       ulPropTag : ULONG;
  2234.     end;
  2235.     
  2236.   PDTBLEDIT = ^TDTBLEDIT;
  2237.   
  2238. {  List Box  }
  2239.  
  2240. { Valid ulFlags:
  2241.  }
  2242.  
  2243. const
  2244.   MAPI_NO_HBAR = ULONG($00000001);
  2245.   MAPI_NO_VBAR = ULONG($00000002);
  2246.  
  2247. type
  2248.   TDTBLLBX =     
  2249.     record
  2250.       ulFlags : ULONG;
  2251.       ulPRSetProperty : ULONG;
  2252.       ulPRTableName : ULONG;
  2253.     end;
  2254.     
  2255.   PDTBLLBX = ^TDTBLLBX;
  2256.   
  2257. {  Combo Box   }
  2258.  
  2259. { Valid ulFlags:
  2260.  *   MAPI_UNICODE
  2261.  }
  2262.  
  2263. type
  2264.   TDTBLCOMBOBOX =     
  2265.     record
  2266.       ulbLpszCharsAllowed : ULONG;
  2267.       ulFlags : ULONG;
  2268.       ulNumCharsAllowed : ULONG;
  2269.       ulPRPropertyName : ULONG;
  2270.       ulPRTableName : ULONG;
  2271.     end;
  2272.     
  2273.   PDTBLCOMBOBOX = ^TDTBLCOMBOBOX;
  2274.   
  2275. {  Drop Down   }
  2276.  
  2277. { Valid ulFlags:
  2278.  *   none
  2279.  }
  2280.  
  2281. type
  2282.   TDTBLDDLBX =     
  2283.     record
  2284.       ulFlags : ULONG;
  2285.       ulPRDisplayProperty : ULONG;
  2286.       ulPRSetProperty : ULONG;
  2287.       ulPRTableName : ULONG;
  2288.     end;
  2289.     
  2290.   PDTBLDDLBX = ^TDTBLDDLBX;
  2291.   
  2292. {  Check Box   }
  2293.  
  2294. { Valid ulFlags:
  2295.  *   MAPI_UNICODE
  2296.  }
  2297.  
  2298. type
  2299.   TDTBLCHECKBOX =     
  2300.     record
  2301.       ulbLpszLabel : ULONG;
  2302.       ulFlags : ULONG;
  2303.       ulPRPropertyName : ULONG;
  2304.     end;
  2305.     
  2306.   PDTBLCHECKBOX = ^TDTBLCHECKBOX;
  2307.   
  2308. {  Group Box   }
  2309.  
  2310. { Valid ulFlags:
  2311.  *   MAPI_UNICODE
  2312.  }
  2313.  
  2314. type
  2315.   TDTBLGROUPBOX =     
  2316.     record
  2317.       ulbLpszLabel : ULONG;
  2318.       ulFlags : ULONG;
  2319.     end;
  2320.     
  2321.   PDTBLGROUPBOX = ^TDTBLGROUPBOX;
  2322.   
  2323. {  Button control   }
  2324.  
  2325. { Valid ulFlags:
  2326.  *   MAPI_UNICODE
  2327.  }
  2328.  
  2329. type
  2330.   TDTBLBUTTON =     
  2331.     record
  2332.       ulbLpszLabel : ULONG;
  2333.       ulFlags : ULONG;
  2334.       ulPRControl : ULONG;
  2335.     end;
  2336.     
  2337.   PDTBLBUTTON = ^TDTBLBUTTON;
  2338.   
  2339. {  Pages   }
  2340.  
  2341. { Valid ulFlags:
  2342.  *   MAPI_UNICODE
  2343.  }
  2344.  
  2345. type
  2346.   TDTBLPAGE =     
  2347.     record
  2348.       ulbLpszLabel : ULONG;
  2349.       ulFlags : ULONG;
  2350.       ulbLpszComponent : ULONG;
  2351.       ulContext : ULONG;
  2352.     end;
  2353.     
  2354.   PDTBLPAGE = ^TDTBLPAGE;
  2355.   
  2356. {  Radio button   }
  2357.  
  2358. { Valid ulFlags:
  2359.  *   MAPI_UNICODE
  2360.  }
  2361.  
  2362. type
  2363.   TDTBLRADIOBUTTON =     
  2364.     record
  2365.       ulbLpszLabel : ULONG;
  2366.       ulFlags : ULONG;
  2367.       ulcButtons : ULONG;
  2368.       ulPropTag : ULONG;
  2369.       lReturnValue : Longint;
  2370.     end;
  2371.     
  2372.   PDTBLRADIOBUTTON = ^TDTBLRADIOBUTTON;
  2373.   
  2374. {  MultiValued listbox }
  2375.  
  2376. { Valid ulFlags:
  2377.  *   none
  2378.  }
  2379.  
  2380. type
  2381.   TDTBLMVLISTBOX =     
  2382.     record
  2383.       ulFlags : ULONG;
  2384.       ulMVPropTag : ULONG;
  2385.     end;
  2386.     
  2387.   PDTBLMVLISTBOX = ^TDTBLMVLISTBOX;
  2388.   
  2389. {  MultiValued dropdown }
  2390.  
  2391. { Valid ulFlags:
  2392.  *   none
  2393.  }
  2394.  
  2395. type
  2396.   TDTBLMVDDLBX =     
  2397.     record
  2398.       ulFlags : ULONG;
  2399.       ulMVPropTag : ULONG;
  2400.     end;
  2401.     
  2402.   PDTBLMVDDLBX = ^TDTBLMVDDLBX;
  2403.   
  2404. { IProviderAdmin Interface ---------------------------------------------- }
  2405.  
  2406. { Flags for ConfigureMsgService }
  2407.  
  2408. const
  2409.   UI_SERVICE = $00000002;
  2410.   SERVICE_UI_ALWAYS = $00000002        { Duplicate UI_SERVICE for consistency and compatibility }
  2411.   ;
  2412.   SERVICE_UI_ALLOWED = $00000010;
  2413.   UI_CURRENT_PROVIDER_FIRST = $00000004;
  2414.  
  2415. { MSG_SERVICE_UI_READ_ONLY         0x00000008 - in MAPISPI.H }
  2416.  
  2417. { GetProviderTable() }
  2418.  
  2419. {***** MAPI_UNICODE            ((ULONG) 0x80000000) above }
  2420.  
  2421. { Values for PR_RESOURCE_FLAGS in message service table }
  2422.  
  2423. { IAttach Interface ------------------------------------------------------- }
  2424.  
  2425. { IAttach attachment methods: PR_ATTACH_METHOD values }
  2426.   
  2427. const
  2428.   NO_ATTACHMENT = ULONG($00000000);
  2429.   ATTACH_BY_VALUE = ULONG($00000001);
  2430.   ATTACH_BY_REFERENCE = ULONG($00000002);
  2431.   ATTACH_BY_REF_RESOLVE = ULONG($00000003);
  2432.   ATTACH_BY_REF_ONLY = ULONG($00000004);
  2433.   ATTACH_EMBEDDED_MSG = ULONG($00000005);
  2434.   ATTACH_OLE = ULONG($00000006);
  2435.  
  2436. {!! Interface declarations }
  2437.  
  2438. type
  2439.   IMessage = interface;
  2440.   IAttach = interface;
  2441.  
  2442.   IMailUser =
  2443.     interface(IMAPIProp)
  2444.     [strIID_IMailUser]
  2445.     end;
  2446.   
  2447.   IDistList =
  2448.     interface(IMAPIContainer)
  2449.     [strIID_IDistList]
  2450.       function CreateEntry (cbEntryID : ULONG; lpEntryID : PENTRYID;
  2451.         ulCreateFlags : ULONG; var lppMAPIPropEntry : IMAPIProp) : HResult; stdcall;
  2452.       function CopyEntries (lpEntries : PENTRYLIST; ulUIParam : ULONG;
  2453.         lpProgress : IMAPIProgress; ulFlags : ULONG) : HResult; stdcall;
  2454.       function DeleteEntries (lpEntries : PENTRYLIST; ulFlags : ULONG) : HResult; stdcall;
  2455.       function ResolveNames (lpPropTagArray : PSPropTagArray; ulFlags : ULONG; 
  2456.         lpAdrList : PADRLIST; lpFlagList : PFlagList) : HResult; stdcall;
  2457.     end;
  2458.   
  2459.   IMAPIFolder =
  2460.     interface(IMAPIContainer)
  2461.     [strIID_IMAPIFolder]
  2462.       function CreateMessage (const lpInterface : TIID; ulFlags : ULONG;
  2463.         var lppMessage : IMessage) : HResult; stdcall;
  2464.       function CopyMessages (lpMsgList : PENTRYLIST; const lpInterface : TIID;
  2465.         lpDestFolder : Pointer; ulUIParam : ULONG; lpProgress : IMAPIProgress;
  2466.         ulFlags : ULONG) : HResult; stdcall;
  2467.       function DeleteMessages (lpMsgList : PENTRYLIST; ulUIParam : ULONG;
  2468.         lpProgress : IMAPIProgress; ulFlags : ULONG) : HResult; stdcall;
  2469.       function CreateFolder (ulFolderType : ULONG; lpszFolderName : PChar; 
  2470.         lpszFolderComment : PChar; const lpInterface : TIID; ulFlags : ULONG; 
  2471.         var lppFolder : IMAPIFolder) : HResult; stdcall;
  2472.       function CopyFolder (cbEntryID : ULONG; lpEntryID : PENTRYID;
  2473.         const lpInterface : TIID; lpDestFolder : Pointer; lpszNewFolderName : PChar; 
  2474.         ulUIParam : ULONG; lpProgress : IMAPIProgress; ulFlags : ULONG) : HResult; stdcall;
  2475.       function DeleteFolder (cbEntryID : ULONG; lpEntryID : PENTRYID; 
  2476.         ulUIParam : ULONG; lpProgress : IMAPIProgress; ulFlags : ULONG) : HResult; stdcall;
  2477.       function SetReadFlags (lpMsgList : PENTRYLIST; ulUIParam : ULONG; 
  2478.         lpProgress : IMAPIProgress; ulFlags : ULONG) : HResult; stdcall;
  2479.       function GetMessageStatus (cbEntryID : ULONG; lpEntryID : PENTRYID;
  2480.         ulFlags : ULONG; var lpulMessageStatus : ULONG) : HResult; stdcall;
  2481.       function SetMessageStatus (cbEntryID : ULONG; lpEntryID : PENTRYID;
  2482.         ulNewStatus : ULONG; ulNewStatusMask : ULONG; var lpulOldStatus : ULONG) : HResult; stdcall;
  2483.       function SaveContentsSort (lpSortCriteria : PSSortOrderSet; ulFlags : ULONG) : HResult; stdcall;
  2484.       function EmptyFolder (ulUIParam : ULONG; lpProgress : IMAPIProgress;
  2485.         ulFlags : ULONG) : HResult; stdcall;
  2486.     end;
  2487.  
  2488.   IMsgStore =
  2489.     interface(IMAPIProp)
  2490.     [strIID_IMsgStore]  
  2491.       function Advise (cbEntryID : ULONG; lpEntryID : PENTRYID; ulEventMask : ULONG;
  2492.         lpAdviseSink : IMAPIAdviseSink; var lpulConnection : ULONG) : HResult; stdcall;
  2493.       function Unadvise (ulConnection : ULONG) : HResult; stdcall;
  2494.       function CompareEntryIDs (cbEntryID1 : ULONG; lpEntryID1 : PENTRYID; 
  2495.         cbEntryID2 : ULONG; lpEntryID2 : PENTRYID; ulFlags : ULONG; 
  2496.         var lpulResult : ULONG) : HResult; stdcall;
  2497.       function OpenEntry (cbEntryID : ULONG; lpEntryID : PENTRYID; const lpInterface : TIID;
  2498.         ulFlags : ULONG; var lpulObjType : ULONG; var lppUnk : IUnknown) : HResult; stdcall;
  2499.       function SetReceiveFolder (lpszMessageClass : PChar; ulFlags : ULONG; 
  2500.         cbEntryID : ULONG; lpEntryID : PENTRYID) : HResult; stdcall;
  2501.       function GetReceiveFolder (lpszMessageClass : PChar; ulFlags : ULONG; 
  2502.         var lpcbEntryID : ULONG; var lppEntryID : PENTRYID; 
  2503.         var lppszExplicitClass : PChar) : HResult; stdcall;
  2504.       function GetReceiveFolderTable (ulFlags : ULONG; var lppTable : IMAPITable) : HResult; stdcall;
  2505.       function StoreLogoff (var lpulFlags : ULONG) : HResult; stdcall;
  2506.       function AbortSubmit (cbEntryID : ULONG; lpEntryID : PENTRYID; ulFlags : ULONG) : HResult; stdcall;
  2507.       function GetOutgoingQueue (ulFlags : ULONG; var lppTable : IMAPITable) : HResult; stdcall;
  2508.       function SetLockState (lpMessage : IMessage; ulLockState : ULONG) : HResult; stdcall;
  2509.       function FinishedMsg (ulFlags : ULONG; cbEntryID : ULONG; lpEntryID : PENTRYID) : HResult; stdcall;
  2510.       function NotifyNewMail (lpNotification : PNOTIFICATION) : HResult; stdcall;
  2511.     end;
  2512.  
  2513.   IMessage =
  2514.     interface(IMAPIProp)
  2515.     [strIID_IMessage]
  2516.       function GetAttachmentTable (ulFlags : ULONG; var lppTable : IMAPITable) : HResult; stdcall;
  2517.       function OpenAttach (ulAttachmentNum : ULONG; const lpInterface : TIID; 
  2518.         ulFlags : ULONG; var lppAttach : IAttach) : HResult; stdcall;
  2519.       function CreateAttach (const lpInterface : TIID; ulFlags : ULONG; 
  2520.         var lpulAttachmentNum : ULONG; var lppAttach : IAttach) : HResult; stdcall;
  2521.       function DeleteAttach (ulAttachmentNum : ULONG; ulUIParam : ULONG; 
  2522.         lpProgress : IMAPIProgress; ulFlags : ULONG) : HResult; stdcall;
  2523.       function GetRecipientTable (ulFlags : ULONG; var lppTable : IMAPITable) : HResult; stdcall;
  2524.       function ModifyRecipients (ulFlags : ULONG; lpMods : PADRLIST) : HResult; stdcall;
  2525.       function SubmitMessage (ulFlags : ULONG) : HResult; stdcall;
  2526.       function SetReadFlag (ulFlags : ULONG) : HResult; stdcall;
  2527.     end;
  2528.   
  2529.   IAttach =
  2530.     interface(IMAPIProp)
  2531.     [strIID_IAttachment]
  2532.     end;
  2533.  
  2534.   IProviderAdmin =
  2535.     interface(IUnknown)
  2536.     [strIID_IProviderAdmin]
  2537.       function GetLastError (hResult : HResult; ulFlags : ULONG;
  2538.         var lppMAPIError : PMAPIERROR) : HResult; stdcall;
  2539.       function GetProviderTable (ulFlags : ULONG; var lppTable : IMAPITable) : HResult; stdcall;
  2540.       function CreateProvider (lpszProvider : PChar; cValues : ULONG;
  2541.         lpProps : PSPropValue; ulUIParam : ULONG; ulFlags : ULONG;
  2542.         var lpUID : TMAPIUID) : HResult; stdcall;
  2543.       function DeleteProvider (lpUID : PMAPIUID) : HResult; stdcall;
  2544.       function OpenProfileSection (lpUID : PMAPIUID; const lpInterface : TIID;
  2545.         ulFlags : ULONG; var lppProfSect : IProfSect) : HResult; stdcall;
  2546.     end;
  2547.   
  2548. implementation
  2549.  
  2550. end.
  2551.  
  2552.